指针数据包
相信大多数人会将定长数组换为 指针 , 每次使用时动态的开辟 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文章
7596浏览量
136017 -
指针
+关注
关注
1文章
478浏览量
70497 -
数据包
+关注
关注
0文章
250浏览量
24353
发布评论请先 登录
相关推荐
使用UART FIFO缓冲区时,缓冲区中的数据有时会损坏的原因?
我在使用 UART FIFO 缓冲区时遇到了以下问题。
问题描述:
当通过两个 UART 通道使用完整的 UART FIFO 缓冲区并通过两个通道进行通信时,缓冲区中的数据有时会损坏,
发表于 03-06 06:59
ESP8266有双缓冲区吗?
我想实时传输一些信号的测量数据。信号的采样周期为 1 ms。我想每 500 毫秒发送 2048 字节(一个数据包)。ESP8266有双缓冲区(2x 2048字节)吗?其想法是计数填充一个缓冲区
发表于 07-16 07:29
STM32串口环形缓冲区的实现
一个数组,只不过有两个指针,一个指向列队头,一个指向列队尾。指向列队头的指针(Head)是缓冲区可读的数据,指向列队尾的指针(Tail)是
发表于 10-16 11:40
基于ARM和FPGA的环形缓冲区接口设计方案
公司的V5系列SX95T型FPGA组成。物理层最高速率为1Mb/s,通过变化来自应用层的数据包大小和的间隔来改变用户速率,用以测试ARM和FPGA的数据缓冲区和匹配功能。实际测试和运行表明,此方案
发表于 05-30 05:00
如何检测数据包丢失?
您好,我想做一个回环字体(发送一个IP地址和MAC地址反转的rx包),具有最好的性能(这是对网络段进行速度测试)。我可以将rx缓冲区切换到tx缓冲区(以避免复制包)吗?你能给我一个源代
发表于 03-13 08:56
一文读懂路由器缓冲区大小的重要性
对于网络而言,数据包在网线上的时候,绝对安全,绝对是全速前进,最危险的就是到达转发设备内部,设备处理数据包带来的固有延迟导致数据包必须有机会被缓冲,处理加速比一定要和
发表于 10-15 09:47
•4581次阅读
STM32串口数据接收 --环形缓冲区
STM32串口数据接收 --环形缓冲区环形缓冲区简介 在单片机中串口通信是我们使用最频繁的,使用串口通信就会用到串口的数据接收与发送,环形缓冲区
发表于 12-28 19:24
•30次下载
数据包的发送流程
一个数据包,从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间的发送缓冲区(send buffer),数据包就这样顺着传输层、网络层,进入到数据链路层,在这里
零长数组如何使用定长包定义数据缓冲区
零长数组 请先思考以下问题: C语言中,数组长度是否可以为0? 如果要接收一个不定长数据包,你会如何定义数据缓冲区? 第一个问题 : 在标准C语言中,没有长度为0的数组,但在 GNU
变长数据包数据结构定义
用方便的呢? GNU C 的0长度数组(变长数组/柔性数组)就是这样一个扩展. 对于 0长数组 的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等: 数据结构定义 // 0长度数
C++环形缓冲区设计与实现
一、环形缓冲区基础理论解析(Basic Theory of Circular Buffer) 1.1 环形缓冲区的定义与作用(Definition and Function of Circular
交换机与路由器缓冲区:寻找完美大小
学术界和工业界一直备受争议。本文探讨了高端路由器中数据包缓冲的历史和演变,以期概述当前的实践和未来的趋势。 网络芯片中的缓冲区 在典型的路由器/交换机 ASIC 中,会发现三种类型的数据包
评论