动态数组在通讯协议中的应用

本文介绍使用结构体作为数据承载格式的用法。

在使用结构体进行数据交互时,既需要使用到固定结构,又支持扩展,数据长度能够根据消息类型的不同而不同,这个时候,需要类似如下结构定义:

struct TCommonMsg
{
	int nMsgId;	   // 消息类型
	int nMsgLen;  // 消息长度
    char szBuf[i]; // 消息实际内容存储空间,其中i是可变的
}

c++要求在定义数组时,必须明确指出数组大小,否则编译失败。这种情况下,可以使用如下方式来定义:

struct TCommonMsg
{
	int nMsgId;	   // 消息类型
	int nMsgLen;  // 消息长度
    char szBuf[0]; // 定义动态数组
}

使用空数组来构建缓冲区有以下优点:

| 对比 | 使用指针 || 使用0长数组 |
| ---- | ---- |---- |
| 内存申请 | 先申请整个大小,再申请动态大小 | 只需申请一次 |
| 内存释放 | 先释放指针指向内存,再释放整体内存 | 释放一次 |
| 成员访问 | 先通过结构体得到指针成员,再通过指针访问 | 直接通过成员访问 |
| 占用空间 | 4字节指针大小 | 不占用空间 |

小结

在使用结构体作为通讯协议的承载格式时,建议使用动态数组的方式,操作和管理内存都方便,扩展性好。

作者:浩天之家
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
Top
收藏
关注
评论
原文地址:https://www.cnblogs.com/cherishui/p/15423330.html