C中对齐结构的差距

ThP*_*ThP 2 c struct memory-alignment

我有一个巨大的结构,有不同类型的成员.我知道成员根据他们的类型对齐.
无论如何都要找出差距在哪里?
我的意思是我有兴趣知道编译器在哪些成员之间插入了一个间隙(当然差距是多少).

Ran*_*832 5

它取决于平台,您可以使用offsetof宏通过小型测试程序来确定它,或者对于大多数Unix系统,您可以参考您的体系结构的System V ABI文档.

通常,在任何成员之前插入额外的空间,否则会不正确地对齐,没有任何重新排序,最后是否会导致数组中的下一个结构错误地对齐.

struct s { short a; int b; };
offsetof(struct s, a) == 0
offsetof(struct s, b) == 4 // for example
sizeof(short) == 2
Run Code Online (Sandbox Code Playgroud)

间隙是a和b之间的两个字节.

要检测结构末尾的填充,只需查看结构的大小以及最后一个元素的偏移量和大小.

struct s2 { int a; short b; };
offsetof(struct s2, b) == 4
sizeof(struct s2) == 8
Run Code Online (Sandbox Code Playgroud)