2

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

structmemallocがわかりません。

typedef struct a{
} a;

sizeof(a) is 0

typedef struct b{
    int bb
} b;

sizeof(b) is 4

typedef struct b2{
    int *bbbb
} b2;

sizeof(b2) is 8

typedef struct d{
    int x;
    int *y;
} d;

sizeof(d) is 16!

sizeofが16である理由は12ですか?(int + int point = 4 + 8);

sizeof(int)は4だと思いますが、structのint varの場合、memは8ですか?

4

4 に答える 4

4

sizeofが16である理由は12ですか?(int + int point = 4 + 8);

ポインタはマシン上で8バイト幅であるため、パフォーマンス上の理由から、コンパイラはポインタを8バイト境界に揃える必要があると感じました。一部のアーキテクチャでは、厳密にはパフォーマンスの問題ではない場合もあります。特定のタイプへの非整列アクセスは、完全に違法である可能性があります。

言い換えると、コンパイラは、構造体の最初の要素の前を除いて、どこにでもパディングを追加できます。

于 2012-09-09T16:43:59.420 に答える
1

使用しているプラ​​ットフォームに応じて、sizeof(int *)4または8(またはその他)になります。また、コンパイラには、必要に応じて未使用のパディングバイトを構造体に追加する自由があります。

于 2012-09-09T16:42:59.700 に答える
0

これは、パディングとメモリアライメントが原因です。詳細については、このリンクを参照してください。

于 2012-09-09T16:43:44.413 に答える
0

記憶力の調整が機能しています。物事を調整する必要があります。

于 2012-09-09T16:45:57.673 に答える