Meh*_*ife 2 c struct padding cpu-architecture memory-alignment
我试图了解结构填充在 C 中的工作原理。特别是在 Linux x86-64 环境中。为此,我重新排列了给定结构的成员的顺序,以查看在不需要时是否不会应用填充。然而,当我编译并运行打印每个结构的大小的代码时,填充被应用于它们两个,即使第二个结构(struct b)的成员以这样的方式排列,连续地将它们存储在内存中不会导致其中之一占据多个字块。
#include <stdio.h>
struct a {
int ak;
char ac;
char* aptr;
};
struct b {
char* bptr;
int bk;
char bc;
};
int main(int argc, char* argv[]) {
printf("%lu\n", sizeof(struct a));
printf("%lu\n", sizeof(struct b));
}
Run Code Online (Sandbox Code Playgroud)
输出:
16
16
Run Code Online (Sandbox Code Playgroud)
最大的成员struct b(或更准确地说,具有最宽对齐要求的成员)具有 8 字节对齐,因此结构的大小需要是 8 的倍数,以便该结构的数组将使其成员正确对齐。
所以struct b最后会有 3 个字节的填充。