EEPROM带电可擦可编程IC存储器芯片大全-亿配芯城-变长数据包数据结构定义
你的位置:EEPROM带电可擦可编程IC存储器芯片大全-亿配芯城 > 芯片资讯 > 变长数据包数据结构定义
变长数据包数据结构定义
发布日期:2024-01-01 12:03     点击次数:179
变长数据包

定长数组使用方便, 但是却浪费空间, 指针形式只多使用了一个指针的空间, 不会造成大量空间分浪费, 但是使用起来需要多次分配, 多次释放, 那么有没有一种实现方式能够既不浪费空间, 又使用方便的呢?

GNU C 的0长度数组(变长数组/柔性数组)就是这样一个扩展. 对于0长数组的这个特点, 电子元器件PDF资料大全很容易构造出变成结构体, CMOS图像传感器集成电路芯片如缓冲区,芯片交易网IC交易网数据包等等:

数据结构定义
//  0长度数组
struct zero_buffer
{
    int     len;
    char    data[0];
};
数据结构大小

这样的变长数组常用于网络通信中构造不定长数据包, EEPROM带电可擦可编程存储器芯片大全 不会浪费空间浪费网络流量, ATMEGA系列ATMEL芯片COMEEPROM带电可擦可编程存储器芯片大全 因为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;