0

プロジェクトでコードを実行しています。

以下は、次のように定義された構造体です。

typedef struct {
    ULONG gatewayIp;
    UBYTE status;
        UBYTE align;
    UWORD info;
    ULONG magicTemp;
    uword stationCode;
} GatewayStatus;

私の質問は、なぜ私たちが上記の構造の中間にいるのかということです。

次のリンクに記載されているように、コンパイラが整列を処理することを教えました。 http://vcfaq.mvps.org/lang/11.htm

上記の構造に関係なく、質問を一般化しますプログラムで調整する必要があるシナリオと、コンパイラーがそれを行うシナリオは何ですか?

エンディアン タイプが異なる 2 台のマシン、つまり 1 台の m/c がビッグ エンディアンで、もう 1 台がロー エンディアンの場合、パディングは必要ですか?

私の質問を明確にしてください。

ありがとう!

4

2 に答える 2

0

コンパイラは、マシンによって異なりますが、デフォルトでアライン可能な最大バイト数に合わせてデータをアラインします。Linux の場合、GCC コンパイラはデフォルトで 4 バイト アラインメントを行っています。

8、16、32 などのバイトを整列させたい場合は、コンパイラに明示的に伝える必要があります。

于 2012-04-26T07:16:38.263 に答える
0

その場所にパッドバイトがあることを明確にするためにそこにあると思います。これは、誰かが将来バイトフィールドを追加したい場合に役立ちます。

もう 1 つのシナリオは、アライメント要件のないシステムで構造体を使用する場合 (通常は 8 ビット アーキテクチャの場合) ですが、大規模なマシンと同じレイアウトにする必要があります。この場合、構造体定義には明示的なパディングが必要です。

于 2012-04-26T07:08:02.887 に答える