C 類所佔空間總結

2021-07-04 18:15:01 字數 715 閱讀 6610

1.空類可以例項化,且所佔空間為一。原因:編譯器想為每個例項化物件分配乙個獨一無二的記憶體位址。

2.類中有虛函式,則無論類中有幾個虛函式,類所佔空間加4。原因:類中存放乙個4位元組的虛指標指向虛函式列表,虛指標存放在最開始的記憶體資料中,即在其他成員變數之前。(所有虛函式都在虛函式列表中,虛指標用來指定虛函式在虛函式列表中的入口,虛函式列表的每一項儲存乙個虛函式的位址);

3.類中的靜態變數不佔類的儲存空間,非靜態變數按對齊後的大小計算總值(預設對齊為4)。原因:靜態變數儲存在全域性/靜態變數區中,靜態變數不屬於任何乙個類。

4.類的成員函式不佔記憶體,類只是乙個型別定義,不佔記憶體,類的物件例項化後才佔記憶體。但是都可以通過類/物件名檢視所佔記憶體大小。原因: (摘抄) 成員函式還是以一般的函式一樣的存在。a.fun()是通過fun(a.this)來呼叫的。所謂成員函式只是在名義上是類裡的。其實成員函式的大小不在類的物件裡面,同乙個類的多個物件共享函式**。而我們訪問類的成員函式是通過類裡面的乙個指標實現,而這個指標指向的是乙個table,table裡面記錄的各個成員函式的位址(當然不同的編譯可能略有不同的實現)。所以我們訪問成員函式是間接獲得位址的。所以這樣也就增加了一定的時間開銷,這也就是為什麼我們提倡把一些簡短的,呼叫頻率高的函式宣告為inline形式(內聯函式)。

5.子類的大小,為自身非靜態成員變數的大小加上父類的大小(與繼承方式無關),在記憶體中,父類儲存在子類之前。子類與父類共享乙個虛指標,若父函式與子函式都有虛函式,則虛函式總大小為4。

C 中的類所佔記憶體空間總結

類所佔記憶體的大小是由成員變數 靜態變數除外 決定的,成員函式 這是籠統的說,後面會細說 是不計算在內的。摘抄部分 成員函式還是以一般的函式一樣的存在。a.fun 是通過fun a.this 來呼叫的。所謂成員函式只是在名義上是類裡的。其實成員函式的大小不在類的物件裡面,同乙個類的多個物件共享函式 ...

C 中的類所佔記憶體空間總結

而我們訪問類的成員函式是通過類裡面的乙個指標實現,而這個指標指向的是乙個table,table裡面記錄的各個成員函式的位址。所以我們訪問成員函式是間接獲得位址的,這樣也就增加了一定的時間開銷,這也就是為什麼我們提倡把一些簡短的,呼叫頻率高的函式宣告為inline形式 內聯函式 一 class cba...

C 中的類所佔記憶體空間總結

類所佔記憶體的大小是由成員變數 靜態變數除外 決定的,成員函式 這是籠統的說,後面會細說 是不計算在內的。摘抄部分 成員函式還是以一般的函式一樣的存在。a.fun 是通過fun a.this 來呼叫的。所謂成員函式只是在名義上是類裡的。其實成員函式的大小不在類的物件裡面,同乙個類的多個物件共享函式 ...