構造体にポインターが含まれていると、構造体にメモリのオーバーヘッドがあることに気付きました。ここに例があります:
typedef struct {
int num1;
int num2;
} myStruct1;
typedef struct {
int *p;
int num2;
} myStruct2;
int main()
{
printf("Sizes: int: %lu, int*: %lu, myStruct1: %lu, myStruct2: %lu\n", sizeof(int),
sizeof(int*), sizeof(myStruct1), sizeof(myStruct2));
return 0;
}
これにより、64 ビット マシンで次のように出力されます。
Sizes: int: 4, int*: 8, myStruct1: 8, myStruct2: 16
のサイズを除いて、すべてが私には理にかなっていますmyStruct2
。16 ( ) ではなく 12 しかないと思っていましたsizeof(int*) + sizeof(int) = 12
。
なぜこれが起こっているのか誰か説明してもらえますか?ありがとうございました!
(これはどこかで尋ねられたにちがいないと確信していますが、見つけることができませんでした。)