为什么在C/C++中,结构体的sizeof不等于每个成员的sizeof之和?
sizeof() 获取的结构类型元素的大小并不总是等于每个单独成员的大小。有时编译器会添加一些填充以避免对齐问题。所以尺寸可能会改变。当结构成员后面跟着一个尺寸较大的成员或位于结构末尾时,将添加填充。不同的编译器有不同类型的对齐约束。在 C 标准中,总对齐结构取决于实现。
情况 1
在这种情况下,双精度 z 为 8 字节长,大于 x(4 字节) )。因此又添加了 4 个字节的填充。此外,短类型数据 y 在内存中具有 2 字节空间,因此添加了额外的 6 字节作为填充。
示例代码
#include struct myStruct { int x; //Integer takes 4 bytes, and padding 4 bytes double z; //Size of double is 8-byte, no padding short int y; //Size of short is 2-byte, padding 6-bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }登录后复制