埋め込みの仕組みを理解しています。私は整列が何であるか知っています。私にとって奇妙なのは、なぜcharフィールドのみの構造体のサイズが4バイト(最後にパディング)に揃えられていないのですか?私はこれが仕様によって保証されていないと考えているので、コンパイラはそれをしません。そのような場合は、そのような規則への言及を得ることができますか?私は主にx86とx86-64のアーキテクチャーに興味があります。sizeof c構造体のcharフィールドのみ
例:
struct foo {
char field1;
char field2;
char field3;
} foo2;
int main(void)
{
printf("sizeof=%lu\n", sizeof foo2);
}
出力:sizeof=3
パディングはどこですか?あなたは3つの 'char'sを持っているので、3バイトあります。 – drum
ほとんどのシステムでバイト( 'char'はほとんどのプラットフォームでは8ビットのバイト)が奇数アドレスと偶数アドレスの両方でアクセスできるので、構造体は最後に埋められる必要はありません。 。 –
ARM OABI(apcs-gnu)では、これは4バイト境界になります。 (なぜ私に聞かないで、そのABIは多くの意味をなしません) –