天天看點

特别的位元組對齊問題

有如下一個結構體:

struct X

{

        uint32_t a;

        char* b[0];

};

sizeof(X)的值為多少了?

關鍵點:數組次元為0的成員不參與,但是它的類型參與。

注:在x86_64上“char*”的algin值為8,x86上為4。

那麼:

#pragma pack(8)

#pragma pack()

sizeof(X)值為8,因為alignof(char*)和pack(8)最小值為8,故按8位元組對齊。

#pragma pack(4)

sizeof(X)值為8,因為alignof(char*)和pack(4)最小值為4,故按4位元組對齊。

#pragma pack(1)

按1位元組對齊時,sizeof(X)值為8,因為alignof(char*)和pack(1)最小值為4,故按1位元組對齊。

如果結構體變成:

        char b[0];