struct {
integer a;
struct c b;
...
}
Run Code Online (Sandbox Code Playgroud)
一般来说,gcc如何计算所需的空间?这里有没有人偷看内幕?
R..*_*R.. 12
我没有"偷看内幕",但它很清楚,任何理智的编译器都会以完全相同的方式完成它.过程如下:
这是一个例子(假设int是4个字节并且有4个字节对齐):
struct foo {
char a;
int b;
char c;
};
Run Code Online (Sandbox Code Playgroud)
char(1); 大小仍为0.char(1)的大小; 现在大小是1.int(4); 现在大小是4.int(4)的大小; 现在大小是8.char(1); 大小仍然是8.char(1)的大小; 现在大小是9.编辑:为了解决为什么最后一步是必要的,假设大小只是9而不是12.现在声明struct foo myfoo[2];并考虑&myfoo[1].b,这是过去的myfoo9个字节和过去9个字节的13个字节&myfoo[0].b.这意味着它是不可能的两个myfoo[0].b和myfoo[1].b对齐到其所需的对准(4).