struct Ca { int *p; };
Ca a;
cout << sizeof(a); // 輸出 4 (32位) 或 8 (64位)
問題:未實例化指針指向的內存,為何結構體有大小?
Ca 實例 (棧上) +----+----+----+----+ | p (4 bytes) | ← 指針變量本身,值為 0x00000000 (未初始化) 或堆地址 +----+----+----+----+ sizeof = 4
struct Mixed {
char c; // 1 byte
// 3 bytes padding
int *p; // 4 bytes (32位)
// 0 bytes padding
double d; // 8 bytes
};
// sizeof = 1 + 3 + 4 + 8 = 16 (典型對齊)
| 概念 | 含義 |
|---|---|
| 對象大小 (sizeof) | 對象自身佔用的存儲空間,含所有成員變量 (含指針、引用佔指針大小)、填充字節、虛表指針 (若有虛函數) |
| 指向內存大小 | 指針指向的動態分配區域大小,由 `malloc`/`new` 參數決定,運行時動態變化,編譯期不可知 |
理解「指針是變量,存地址;指向內存是另一塊區域」是掌握 C/C++ 內存模型的基石。