变长数据包
定长数组使用方便, 但是却浪费空间, 指针形式只多使用了一个指针的空间, 不会造成大量空间分浪费, 但是使用起来需要多次分配, 多次释放, 那么有没有一种实现方式能够既不浪费空间, 又使用方便的呢?
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;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网
网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7604浏览量
136683 -
数据包
+关注
关注
0文章
260浏览量
24385 -
数据结构
+关注
关注
3文章
573浏览量
40123
发布评论请先 登录
相关推荐
OBS边缘节点中变长数据包突发汇聚实现
基于光突发交换边缘节点在组装数据包前要采用交换阵对其进行突发汇聚,描述了交换阵常用的串行输入轮循算法,根据边缘节点中数据包变长突发汇聚的特点提出了变长串行输
发表于 04-19 19:16
•18次下载
网络数据包捕获机制研究
网络数据包捕获技术,是实现入侵检测、网络安全审计的关键技术。本文改进了国外传统的数据包捕获函数库Libpcap 捕获数据包的方案。原方案在网卡捕获到数据包后,
发表于 09-01 10:09
•9次下载
基于Jpcap的数据包捕获器的设计与实现
本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实
发表于 01-15 13:47
•38次下载
什么是数据包?
什么是数据包?
您在互联网上做的一切都涉及到数据包。例如,您接收的每个网页都以一系列数据包的形式传入,您发送的每封电子邮件都以一系列数据包的形式传出。以
发表于 08-03 09:13
•2022次阅读
数据结构是什么_数据结构有什么用
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高
发表于 11-17 14:45
•1.6w次阅读
什么是数据结构?为什么要学习数据结构?数据结构的应用实例分析
本文档的主要内容详细介绍的是什么是数据结构?为什么要学习数据结构?数据结构的应用实例分析包括了:数据结构在串口通信当中的应用,数据结构在按键
发表于 09-26 15:45
•14次下载
网络数据包分析软件wireshark的基本使用
Wireshark(前称Ethereal)是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据
NetApp的数据结构是如何演变的
统一数据跨分布式资源进行管理,以实现数据移动的一致性和控制,安全、可见性、保护和访问。
本文定义了数据结构及其体系结构,讨论了
发表于 08-25 17:15
•0次下载
如何使用指针数据包定义数据缓冲区
, 只浪费了一个指针域的空间. 数据包定义 struct point_buffer{ int len; char * data ;}; 数据结构大小 考虑对齐, 那么数据结构的大小 >
评论