0%

Creating Variable-size structs in C/C++

這種技巧很常在Open Source的專案中看到,看了Arrays of Length Zero原本以為是GCC獨有Extensionm,後來發現Clang跟VC都能使用,記錄一下。

1
2
3
4
5
6
7
8
9
10
11
12
struct datapacket
{
int size;
int data[0];
];
void f()
{
struct datapacket *pkt =
malloc( sizeof(struct datapacket) +
sizeof(int)*9 );
/* further code . . . */
}

這邊的data[0]不佔記憶體空間,因此sizeof(struct datapacket)大小相當於sizeof(int),而data就是一個記憶體指標,指向一塊連續的記憶體。