4

私はこのように定義された構造体を持っています:

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

さて、私の考えでは、その構造体は10バイトの長さです。しかし、sizeofはそれが16バイトの長さであると報告していますか?誰もが理由を知っていますか?

WindowsDDKのビルドツールを使用してコンパイルしています。

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ビットシステムで作業しているので、との間には3バイトのパディングがconfigurationIndicatorありbaudRate、構造体の最後にはさらに3バイトのパディングがあります。

于 2009-12-16T10:53:51.863 に答える