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
,这是过去的myfoo
9个字节和过去9个字节的13个字节&myfoo[0].b
.这意味着它是不可能的两个myfoo[0].b
和myfoo[1].b
对齐到其所需的对准(4).