代码之家  ›  专栏  ›  技术社区  ›  Alistair Evans

不需要结构sizeof结果

  •  3
  • Alistair Evans  · 技术社区  · 15 年前

    我有一个结构定义如下:

    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 回复  |  直到 15 年前
        1
  •  10
  •   Pavel Radzivilovsky    15 年前

    对齐。

    使用

    #pragma pack(1)

    ...struct goes here...

    #pragma pack()

    我还建议重新排序,如果需要,可以填充保留字节,这样多字节整型就可以更好地对齐。这将使对tbe cpu的处理更快,代码更小。

        2
  •  4
  •   Rik elirevach    15 年前

    更改元素的顺序。从ulong开始,然后是字节。这将改进结构在内存中的对齐方式。

        3
  •  3
  •   Thomas    15 年前

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

        4
  •  2
  •   ddaa    15 年前

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

    大概,您在32位系统上工作,因此在 configurationIndicator baudRate ,并在结构末尾添加3个字节的填充。