当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

变长数据包数据结构定义

时间:2023-09-27 | 栏目:可编程逻辑 | 点击:

变长数据包

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

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;

您可能感兴趣的文章:

相关文章