[英]Finding the correct size of a misaligned structure
typedef struct structA
{
char C;
double D;
int I;
} structA_t;
此structA_t结构的大小:
sizeof(char)+ 7字节填充+ sizeof(double)+ sizeof(int)= 1 + 7 + 8 + 4 = 20字节
但这是错误的,正确的是
24
。 为什么?
目前最有可能是最后一次后4个字节的填充ìnt
。
如果sizeof(double) == 8
则可能在您的平台上alignof(double) == 8
。 考虑这种情况:
structA_t array[2];
如果size只有20,则array[1].D
将不对齐(地址可以被4整除,而不是8,这是必需的对齐)。
char = 1个字节
double = 8个字节
int = 4个字节
对齐double =>
padding char => 1+7
padding double => 8+0
padding int => 4+4
=> 24个字节
或者,简单地说,是最大的倍数=> 3(字段数)* 8(最大的大小)= 24
我的猜测是你的系统中int
的大小是4字节,所以int也必须填充4字节,以实现8字节的字大小。
total_size=sizeof(char) + 7 Byte padding + sizeof(double) + sizeof(int) + 4 Bytes padding = 24 Bytes
关于填充/对齐的好文章: http : //www.drdobbs.com/cpp/padding-and-rearranging-structure-member/240007649
由于双成员,它强制所有内容都是八字节对齐的。
如果你想要一个更小的结构,那么下面的结构只给你16个字节!
typedef struct structA
{
int I;
char C;
double D;
} structA_t;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.