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
    收藏
    关注
    评论
  • 相关阅读:
    XSS 1
    KALI修改密码
    bugku web4
    16进制 32进制 base64之间的区别
    buuctf
    buuctf wireshark
    buuctf 变异凯撒
    2016集训测试赛(二十)Problem A: Y队列
    USACO 4.1.1 麦香牛块 Beef McNuggets
    2016集训测试赛(十八)Problem C: 集串雷 既分数规划学习笔记
  • 原文地址:https://www.cnblogs.com/cherishui/p/15423330.html
Copyright © 2011-2022 走看看