一個類包含:虛函數 print()、非靜態 int a、靜態 double b。其對象佔用多少內存?具體包含什麼?
對象內存佈局包含:
int a(4 字節)。不包含:
b:屬於類,所有對象共享一份,存儲在全局/靜態存儲區。#include <iostream>
class A {
public:
virtual void print() {}
private:
int a;
static double b;
};
double A::b = 0.0;
int main() {
std::cout << sizeof(A) << std::endl; // 輸出 8(32位)或 16(64位,vptr 8 字節)
return 0;
}
int 4 字節 + 填充 4 字節 + vptr 8 字節)。| 成員類型 | 是否在對象中 | 存儲位置 |
|---|---|---|
| 非靜態數據成員 | 是 | 對象內存 |
| 虛函數表指針 (vptr) | 是(若有虛函數) | 對象內存 |
| 靜態數據成員 | 否 | 全局/靜態區 |
| 非靜態成員函數 | 否 | 代碼段 |
| 虛函數 | 否(僅 vptr 在對象) | 代碼段 + 虛表 |