4

我有一个这样定义的结构:

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

4 回答 4

12

结盟。

利用

#pragma pack(1)

...struct goes here...

#pragma pack()

我还建议对事物进行重新排序,并在必要时使用 RESERVED 字节进行填充,以便更好地对齐多字节整数类型。这将使 CPU 的处理速度更快,代码更小。

于 2009-12-16T10:52:06.317 回答
4

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

于 2009-12-16T10:51:58.873 回答
3

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

于 2009-12-16T10:52:23.757 回答
2

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

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

于 2009-12-16T10:53:51.863 回答