zoukankan      html  css  js  c++  java
  • 动态数组在通讯协议中的应用

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

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

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

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

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

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

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

    小结

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

    作者:浩天之家
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    Top
    收藏
    关注
    评论
  • 相关阅读:
    js学习笔记
    在 Windows 下远程桌面连接 Linux XManager 篇
    使用多种反病毒引擎扫描文件
    光纤接口小知识
    在 Windows 下远程桌面连接 Linux VNC 篇
    基于 RHEL 的 CentOS 5.5 发布
    安装Windows 7的XP模式的步骤
    跨平台加密版 SQLite 3 wxSQLite3
    Free 的迷思
    使用 iptables 限制黑客猜密码
  • 原文地址:https://www.cnblogs.com/cherishui/p/15423330.html
Copyright © 2011-2022 走看看