指针数据包
相信大多数人会将定长数组换为 指针 , 每次使用时动态的开辟 CURR_LENGTH
大小的空间, 因为这样可以避免造成 MAX_LENGTH - CURR_LENGTH
空间的浪费, 只浪费了一个指针域的空间.
- 数据包定义
struct point_buffer
{
int len;
char *data;
};
- 数据结构大小
考虑对齐, 那么数据结构的大小 >= sizeof(int) + sizeof(char *)
- 数据包创建
但是在开辟内存时, 需要调用两次malloc ,第一次给结构体分配内存,第二次给成员data分配内存:
if ((pbuffer = (struct point_buffer *)malloc(sizeof(struct point_buffer))) != NULL)
{
pbuffer- >len = CURR_LENGTH;
if ((pbuffer- >data = (char *)malloc(sizeof(char) * CURR_LENGTH)) != NULL)
{
memcpy(pbuffer- >data, "Hello World", CURR_LENGTH);
printf("%d, %sn", pbuffer- >len, pbuffer- >data);
}
}
- 释放
释放也需要调用两次free函数 ,先释放数据域指针,再释放结构体指针:
/// 销毁
free(pbuffer- >data);
free(pbuffer);
pbuffer = NULL;
- 优点 :不会造成空间的大量浪费,只多使用了一个指针大小的空间
- 缺点 :开辟空间时需要额外开辟数据域的空间,释放时也需要先释放数据域的空间。假如用户不知道这个数据包创建的具体细节,有可能会只释放结构体指针,不释放数据域指针。因此容易造成内存泄露。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7533浏览量
128812 -
指针
+关注
关注
1文章
473浏览量
70364 -
数据包
+关注
关注
0文章
231浏览量
24095
发布评论请先 登录
相关推荐
使用UART FIFO缓冲区时,缓冲区中的数据有时会损坏的原因?
我在使用 UART FIFO 缓冲区时遇到了以下问题。
问题描述:
当通过两个 UART 通道使用完整的 UART FIFO 缓冲区并通过两个通道进行通信时,缓冲区中的数据有时会损坏,
发表于 03-06 06:59
缓冲区中数据如何转换成数组
各位高手,请问下我从仪器中读取出来数据到缓冲区后,如何能把这些数据转换成一个数组,格式应该怎样去转换。。。。半天也弄不出来 帮帮忙吧先谢谢大家了。。。缓冲区的
发表于 02-22 17:05
摄像头采集到的数据远远超过了发送缓冲区的数据,可以不用缓冲区吗?
做了一个摄像头的实验,用的是stm32f103,MCU把摄像头采集到的数据通过串口发送到PC。但我现在比较糊涂的是,摄像头采集到的数据远远超过了发送缓冲区的数据,可以不用
发表于 11-05 22:06
杰杰带你解读【机智云】环形缓冲区源码
= NULL; rb->rbCapacity = 0;return 0;}把这些指针指向NULL,但是环形缓冲区本身地址的数据是不会被清除的,只是表明了这些地址可以被重复使用了而已
发表于 07-17 14:58
MCU进阶之串口环形缓冲区实现
测试数据没有发生丢包现象。补充对于现在的阶段,杰杰我本人写代码也慢慢学会规范了。所有的代码片段均使用了可读性很强的,还有可移植性也很强的。我使用了宏定义来决定是否开启环形缓冲区的方式来
发表于 08-17 13:11
STM32串口环形缓冲区的实现
一个数组,只不过有两个指针,一个指向列队头,一个指向列队尾。指向列队头的指针(Head)是缓冲区可读的数据,指向列队尾的指针(Tail)是
发表于 10-16 11:40
在fpga中缓冲和切换缓冲区大小应该是多少?
嗨,我正在以一个频率连续地以随机顺序接收数据包,并且我想要以相同/不同的频率按顺序缓冲和输出它们。正常的FIFO不起作用,因为数据包不会是“先进先出”,缓冲区大小应该是多少?有什么线索
发表于 02-28 09:46
基于ARM和FPGA的环形缓冲区接口设计方案
公司的V5系列SX95T型FPGA组成。物理层最高速率为1Mb/s,通过变化来自应用层的数据包大小和的间隔来改变用户速率,用以测试ARM和FPGA的数据缓冲区和匹配功能。实际测试和运行表明,此方案
发表于 05-30 05:00
如何检测数据包丢失?
您好,我想做一个回环字体(发送一个IP地址和MAC地址反转的rx包),具有最好的性能(这是对网络段进行速度测试)。我可以将rx缓冲区切换到tx缓冲区(以避免复制包)吗?你能给我一个源代
发表于 03-13 08:56
请问串口的DMA接收缓冲区是不是环形缓冲区
大家好!请问串口的DMA接收缓冲区是不是环形缓冲区?通过阅读串口部分的代码,我了解到这样几点:1、串口的DMA接收时循环接收,当缓冲区满了会重新从头开始覆盖掉之前的数据,和环形
发表于 08-30 14:27
嗅探器的最佳缓冲区wifi设置是什么?
我使用 esp32 作为 wifi 802.11 数据包嗅探器,使用混杂模式。该设备专用于此目的,因此我想要一个能够最大化嗅探器性能的 wifi 配置。嗅探器的最佳缓冲区设置是什么?
发表于 03-01 06:53
变长数据包数据结构定义
用方便的呢? GNU C 的0长度数组(变长数组/柔性数组)就是这样一个扩展. 对于 0长数组 的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等: 数据结构定义 // 0长度数
评论