類物件的大小

2021-04-28 06:26:28 字數 1127 閱讀 9912

classc1

; c1的大小為1 。當類中無任何成員變數時,編譯器會給他分配1 位元組空間。

classc2

; c1的大小為4 。

classc3

; };

c3的大小為1 。普通成員函式不占用物件的空間

classc4

; };

c4的大小為4 。當虛函式存在,會分配乙個指標指向虛函式表

classc5

; virtual

void f2(){};

virtual

void f3(){}; };

c5的大小為4 。分配乙個指標指向虛函式表,虛函式表中會有指標分別指向c5::f1(), c5::f2(), c5::f3() 的位址

classc6

; c6的大小為0x1ch 。string 的大小就是0x1ch

class

c7 : public c4 ;

c7的大小為4 。虛函式表中指標指向c4::f()

class

c8 : public c4 ;

}; c8

的大小為4 。虛函式表中指標指向c8::f()

class

c9 : public c4, public c5 ;

}; c9

的大小為8 。他有兩個指標分別指向來自c4 和c5 的虛函式表

class

c10 : public c4 ;

};c10

的大小為4 。在虛函式表後會附加上c10 自身的虛函式c10::f1()

class

c11 ;

c10的大小為0x0ch 。由於需要記憶體對齊,c1,c2 占用4 位元組,i 占用4 位元組,c3 占用4 位元組

class

c12 ;

c12的大小為1 。static 成員變數不占用物件的空間

class

c13 ;

c13的大小為8 。const 成員變數占用物件的空間,其中const 變數在類初始化時在初始化表中初始化,不同物件的const 成員變數的值完全可能不一樣

class

c14 ;

c14的大小為1 。

c 類的物件的大小

從以上的幾個例子不難發現類的大小 0 空類的物件,物件大小是1。因為這樣,才能有唯一的位址空間與之對應。否則空類的物件陣列obj 10 中ojb 0 和 obj 1 公用位址空間了。為類的非靜態成員資料的型別大小之和 有編譯器額外加入的成員變數的大小,用來支援語言的某些特性 如 指向虛函式的指標 這...

對於類物件模型的理解(類大小計算 大小端位元組序)

類 通俗理解,類相當於乙個模型框架,限定了類有哪些成員變數,但從底層來看,記憶體並沒有分配實際的物理空間來儲存類 物件 類物件即為類的具體描述,當類物件進行例項化過程中,記憶體將為其分配物理空間 乙個類可以例項化多個物件,例項化出的物件 占用實際的物理空間,儲存類成員變數 類中有成員變數,以及成員函...

類物件模型實驗 類資料成員大小

include include using namespace std c 物件記憶體模型 一 空類位元組大小 class emptyclass 二 物件型別占用位元組大小 結構體的有效對齊值的確定 1 當未明確指定時,以結構體中最長的成員的長度為其有效值 2 當用 pragma pack n 指定...