ホームページ  >  記事  >  バックエンド開発  >  C/C++ では、構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

C/C++ では、構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

PHPz
PHPz転載
2023-08-26 09:29:07835ブラウズ

sizeof() 取得される構造体型要素のサイズは、個々のメンバーのサイズと必ずしも同じではありません。コンパイラは、アライメントの問題を回避するためにパディングを追加する場合があります。したがって、寸法が変更される可能性があります。パディングは、構造メンバーの後に大きいサイズのメンバーが続く場合、または構造の最後にある場合に追加されます。コンパイラが異なれば、アライメント制約のタイプも異なります。 C 標準では、全体的なアライメント構造は実装に依存します。

ケース 1

この場合、二重 z の長さは 8 バイトであり、x (4 バイト) よりも大きくなります。したがって、さらに 4 バイトのパディングが追加されます。さらに、short 型データ y にはメモリ内に 2 バイトのスペースがあるため、余分な 6 バイトがパディングとして追加されます。

C/C++ では、構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

サンプル コード

#include <stdio.h>
struct myStruct {
   int x; //Integer takes 4 bytes, and padding 4 bytes
   double z; //Size of double is 8-byte, no padding
   short int y; //Size of short is 2-byte, padding 6-bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}

出力 2

Size of struct: 24

ケース 2

この場合、最初に double Precision を挿入します。数値。8 バイトのスペースを占有します。ここで、整数 x (4 バイト) が追加されます。したがって、さらに 4 バイトのスペースが残っています。短い y を追加した後、追加の 4 バイトのスペースに入れることができ、合計 16 バイトのスペースを占有します。

C/C++ では、構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

サンプル コード

#include <stdio.h>
struct myStruct {
   double z; //Size of double is 8-byte, no padding
   int x; //Integer takes 4 bytes, and padding 4 bytes
   short int y; //Size of short is 2-byte, padding 6-bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}

出力 2

Size of struct: 16

ケース 3

3 番目のケースでも 16 バイトのメモリが必要ですスペースですが、さまざまな方法で配置されています。最初のメンバーは double であるため、最初に配置され、その後に short 型のデータが追加されます。これで、整数を挿入しようとすると、残りの 6 バイト領域に整数を配置できるようになります。したがって、short の後にはパディングがありますが、整数データの後にはパディングはありません。

C/C++ では、構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

サンプルコード

#include <stdio.h>
struct myStruct {
   double z; //Size of double is 8-byte, no padding
   short int y; //Size of short is 2-byte, padding 6-bytes
   int x; //Integer takes 4 bytes, and padding 4 bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}

出力2

Size of struct: 16

以上がC/C++ では、構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。