Size of struct is more than expected
本问题已经有最佳答案,请猛点这里访问。
我已经阅读了这个问题:C++中的结构填充,这一个为什么Sigeof的结构不等于每个成员的sisiof的总和?
我知道这不是标准化的,但我仍然相信这是一个合法的问题。
为什么X64系统上的结构16的大小?
1 | struct foo { char* b; char a;}; |
有效尺寸是8+1=9,但我知道有填充物。不管怎么说,我认为
特定编译器(GCC)认为它的大小应该是16个字节,有什么原因吗?
猜测:最大的类型(例如double或在本例中是x64指针)是否可能指定要使用的填充?
编译器可能在8字节的字边界上对齐结构,以提高访问速度。如果访问没有对齐,9大小的结构可能会使CPU速度慢很多(加上堆栈指针不应该位于奇数地址上)。12个字节(3个填充字节)的大小是可以工作的,但是一些操作,如fpu操作,更喜欢8或16个字节的对齐。
这是因为记忆对齐。默认情况下,内存不是按一个字节顺序排列的,这会发生。内存分配在32位系统上的4字节块上。
定义结构时,可以通过设置