2

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

Struct をランダムに作成しましたが、結果が計算と等しくないため、そのサイズに驚きました。

int main( int argc, char ** argv ) {
    struct S
    {
        int i;
        int b;
        int c;
        long int e;
    };
    cout << sizeof (struct S) << endl; //sizeof is still an operator
    return 0;
}

通常、3*int + 1*long int = 3*4 + 8 = 20 です。

しかし、結果は 24 です。

この 4 バイトはどこから来たのですか?

4

1 に答える 1

5

おそらく、アクセスを高速化するために8バイト境界に配置するために、4バイトstructでパディングされます。long intこれはプラットフォームに依存します。すべてのコンパイラがこれらのバイトを追加するわけではありません。

于 2012-09-27T15:50:50.350 に答える