ThP*_*ThP 2 c struct memory-alignment
我有一个巨大的结构,有不同类型的成员.我知道成员根据他们的类型对齐.
无论如何都要找出差距在哪里?
我的意思是我有兴趣知道编译器在哪些成员之间插入了一个间隙(当然差距是多少).
它取决于平台,您可以使用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)
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |