c 類的物件的大小

2021-06-29 12:16:27 字數 765 閱讀 6493

//從以上的幾個例子不難發現類的大小:

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 位元組,下同 乙個類中,虛函式本身 成員函式...