struct sizeof结果不是预期的

时间:2009-12-16 10:49:07

标签: c++ struct sizeof

我有一个如此定义的结构:

typedef struct _CONFIGURATION_DATA {
    BYTE configurationIndicator;
    ULONG32 baudRate;
    BYTE stopBits;
    BYTE parity;
    BYTE wordLength;
    BYTE flowControl;
    BYTE padding;
} CONFIGURATION_DATA;

现在,根据我的估算,该结构长度为10个字节。但是,sizeof报告它长16个字节?谁知道为什么?

我正在使用Windows DDK中的构建工具进行编译。

4 个答案:

答案 0 :(得分:10)

对齐。

使用

#pragma pack(1)

...struct goes here...

#pragma pack()

我还建议重新排序,如果需要填充然后使用RESERVED字节,这样多字节整数类型将更好地对齐。这将使CPU处理速度更快,代码更小。

答案 1 :(得分:4)

更改元素的顺序。从ULONG开始,然后是BYTE。这将改善结构在内存中的对齐。

答案 2 :(得分:3)

这是由于填充,因为在您的平台上,ULONG32显然必须在4字节边界上对齐。由于struct的开头和结尾显然也必须对齐,因此第一个和最后一个BYTE将填充3个字节。

答案 3 :(得分:2)

您测量的额外大小是编译器引入的填充。

据推测,您正在使用32位系统,因此在configurationIndicatorbaudRate之间将有3个字节的填充,并在结构的末尾有3个字节的填充。