0

したがって、私は通常 sizeof(mystruct) を実行するだけの構造体を持っており、x86 用にコンパイルすると 0x2C が返されますが、コンパイラを JUST x86_64 に切り替えるとすぐに、サイズが 0x30 であることを教えてくれます。

構造体は次のとおりです。

typedef struct Struct
{
    int32_t unk1;       // 0x0
    int32_t unk2;       // 0x4
    int32_t unk3;       // 0x8
    int32_t unk4;       // 0xC

    int64_t    guid;       // 0x10
    int32_t  entryID;   // 0x18
    int32_t  bytes;     // 0x1C
    int32_t  duration;  // 0x20
    int32_t  expiration;   // 0x24

    int32_t  unk5;      // 0x28
} Struct;

次に、次のことを行います。

Struct mystruct;
NSLog(@"0x%X", sizeof(mystruct));

そして、0x30 を出力していますが、0x2C ではないでしょうか? 自分の問題がどこにあるのかわからない

ありがとう!

4

1 に答える 1

7

型の配列がアーキテクチャに対して適切に配置されるようにするための構造パディングです。配列がある場合:

Struct myarray[2];

次に、各要素は、x86 では 4 バイトでアラインされている必要がありますが、x86-64 では 8 バイトでアラインされている必要があります。これを保証するために、構造体の合計サイズは 8 バイトの倍数でなければならないため、コンパイラは最後に余分なパディングを追加します。

于 2013-03-19T18:13:56.260 に答える