字节对齐 变长数组 节省带宽的方式

typedef struct
{
    size_t cbSize;
    char   data[0];
}UnkownSizeStruct;

变长结构如上定义,网络

在msvc编译器中可以使用ide

#pragma pack(1)资源

来定义字节对齐方式,不然在编译器定义结构体时会保留不少空白区域,网络传输时当时不须要传输这些东西,至关浪费带宽资源。编译器

不定长结构体惟一的做用就是指明一个cbSize,说到底,其实这个定长结构结构体其实就是定义一个获取结构长度方法,不定义它也彻底能够。it

好比:编译

void * pData = ................;
size_t dataSize = *(size_t*)pData;
//若是用变长结构体则是
UnkownSizeStruct * pStruct = (UnkownSizeStruct*)pData;
size_t dataSize = pStruct->cbSize;