//從以上的幾個例子不難發現類的大小:
0. 空類的物件,物件大小是1。因為這樣,才能有唯一的位址空間與之對應。否則空類的物件陣列obj[10],中ojb[0] 和 obj[1]公用位址空間了。
1.為類的非靜態成員資料的型別大小之和.
2.有編譯器額外加入的成員變數的大小,用來支援語言的某些特性(如:指向虛函式的指標).
這裡,詳細說明一下。
(1) 沒有父類
不管有幾個虛函式,只要有虛函式,就會有乙個指向虛函式表的指標,4bytes大小(32bit 系統下)。
(2) 有父類。
複雜,有待討論。
虛擬繼承等。
還要注意父類中有虛函式,也會繼承過來,有虛函式表指標。
3.為了優化訪問效率,進行的邊緣調整.
4.與類中的建構函式,析構函式以及其他的成員函式無關.
物件在記憶體中分為幾個部分。
1. 虛函式表 virtual table.
2. 成員變數
記憶體中的排列順序
父類1的v-table 其中包括該類的v-table,接在父類1的v-table後面
父類1的成員變數
父類2的v-table
父類2的成員變數
父類3的v-table
父類3的成員變數
...該類的成員變數
# 父類的順序是類定義時繼承的順序
# 每個類中的成員變數的順序是按照成員變數宣告的順序儲存,會有對齊的情況。
陳浩的csdn部落格,文章詳細介紹了虛函式。
類物件的大小
classc1 c1的大小為1 當類中無任何成員變數時,編譯器會給他分配1 位元組空間。classc2 c1的大小為4 classc3 c3的大小為1 普通成員函式不占用物件的空間 classc4 c4的大小為4 當虛函式存在,會分配乙個指標指向虛函式表 classc5 virtual void f...
C 中類物件所佔空間的大小
首先,平時所宣告的類只是一種型別定義,它本身是沒有大小可言的。因此,如果用sizeof運算子對乙個型別名操作,那得到的是具有該型別實體的大小。計算乙個類物件的大小時的規律 空類 單一繼承的空類 多重繼承的空類所佔空間大小為 1 位元組,下同 乙個類中,虛函式本身 成員函式 包括靜態與非靜態 和靜態資...
C 中類物件所佔空間的大小
c 中類物件所佔空間的大小 首先,平時所宣告的類只是一種型別定義,它本身是沒有大小可言的。因此,如果用sizeof運算子對乙個型別名操作,那得到的是具有該型別實體的大小。計算乙個類物件的大小時的規律 空類 單一繼承的空類 多重繼承的空類所佔空間大小為 1 位元組,下同 乙個類中,虛函式本身 成員函式...