变长数据包
定长数组使用方便, 但是却浪费空间, 指针形式只多使用了一个指针的空间, 不会造成大量空间分浪费, 但是使用起来需要多次分配, 多次释放, 那么有没有一种实现方式能够既不浪费空间, 又使用方便的呢?
GNU C
的0长度数组(变长数组/柔性数组)就是这样一个扩展. 对于0长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等:
- 数据结构定义
// 0长度数组
struct zero_buffer
{
int len;
char data[0];
};
- 数据结构大小
这样的变长数组常用于网络通信中构造不定长数据包, 不会浪费空间浪费网络流量, 因为char data[0];
只是个数组名, 是不占用存储空间的,
即 sizeof(struct zero_buffer) = sizeof(int)
- 数据包创建
我们使用的时候, 只需要开辟一次空间即可:
/// 开辟
if ((zbuffer = (struct zero_buffer *)malloc(sizeof(struct zero_buffer) + sizeof(char) * CURR_LENGTH)) != NULL)
{
zbuffer- >len = CURR_LENGTH;
memcpy(zbuffer- >data, "Hello World", CURR_LENGTH);
printf("%d, %sn", zbuffer- >len, zbuffer- >data);
}
- 释放
释放也是一样的, 一次释放即可:
/// 销毁
free(zbuffer);
zbuffer = NULL;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7533浏览量
128782 -
数据包
+关注
关注
0文章
229浏览量
24095 -
数据结构
+关注
关注
3文章
564浏览量
39900
发布评论请先 登录
相关推荐
C语言与数据结构
目录个人介绍笔试单选题C语言数据结构计算机与操作系统网络通信填空题C语言与数据结构网络通信问答题嵌入式基础知识C语言与数据结构C编程一面二面功能快捷键合理的创建标题,有助于目录的生成如何改变文本
发表于 08-06 07:10
UART数据包设计与解析
上一节讲到起止式SST(Start-Stop-Type)帧结构协议,该协议利用帧头、长度、校验构建帧结构,基于帧结构能实现对数据包的可靠、准确传输。应用层
发表于 12-16 06:15
数据结构是什么?数组为什么要有数组
1、数据结构是什么数据结构就是研究数据如何组织(在内存中排布),如何加工的学问。2、最简单的数据结构:数组为什么要有数组?因为程序中有好多个类型相同、意义相关的变量需要管理,这时候如果
发表于 01-07 08:08
OBS边缘节点中变长数据包突发汇聚实现
基于光突发交换边缘节点在组装数据包前要采用交换阵对其进行突发汇聚,描述了交换阵常用的串行输入轮循算法,根据边缘节点中数据包变长突发汇聚的特点提出了变长串行输
发表于 04-19 19:16
•18次下载
数据结构是什么_数据结构有什么用
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高
发表于 11-17 14:45
•1.6w次阅读
什么是数据结构?为什么要学习数据结构?数据结构的应用实例分析
本文档的主要内容详细介绍的是什么是数据结构?为什么要学习数据结构?数据结构的应用实例分析包括了:数据结构在串口通信当中的应用,数据结构在按键
发表于 09-26 15:45
•14次下载
NetApp的数据结构是如何演变的
统一数据跨分布式资源进行管理,以实现数据移动的一致性和控制,安全、可见性、保护和访问。
本文定义了数据结构及其体系结构,讨论了
发表于 08-25 17:15
•0次下载
如何使用指针数据包定义数据缓冲区
, 只浪费了一个指针域的空间. 数据包定义 struct point_buffer{ int len; char * data ;}; 数据结构大小 考虑对齐, 那么数据结构的大小 >
评论