C 類成員在記憶體中的儲存及對齊方式

2021-08-07 03:06:20 字數 756 閱讀 4278

一、空類的大小

c++中空類的大小是1,這是因為空類也可以被例項化,為了確保每乙個例項在記憶體中都有乙個獨一無二的位址,編譯器往往隱含給乙個空類加乙個位元組。

二、類中的成員函式與非虛成員函式

類中的非虛成員函式不占用空間,虛函式表占用四個位元組,只要有虛函式(無論有幾個)都只占用四個位元組。成員函式還是以一般的函式一樣的存在。a.fun()是通過fun(a.this)來呼叫的。所謂成員函式只是在名義上是類裡的。其實成員函式的大小不在類的物件裡面,同乙個類的多個物件共享函式**。而我們訪問類的成員函式是通過類裡面的乙個指標實現,而這個指標指向的是乙個table,table裡面記錄的各個成員函式的位址(當然不同的編譯可能略有不同的實現)。所以我們訪問成員函式是間接獲得位址的。所以這樣也就增加了一定的時間開銷,這也就是為什麼我們提倡把一些簡短的,呼叫頻率高的函式宣告為inline形式(內聯函式)。

三、派生類與基類

派生類繼承基類的所有成員(包括私有資料成員),派生類的大小是在基類的大小的基礎上再增加自己資料成員的空間。

四、虛表與類資料成員

虛函式表首先存入記憶體中,然後是資料成員。

五、類的與結構體

類的對齊規則與結構體基本一致,即取資料成員本身的對其數與編譯器預設對齊數之間取小的那個數作為實際對齊數。

六、類的資料成員

類的資料成員按其宣告順序加入記憶體,(與其訪問許可權無關,即無論public,private,protected的資料成員,只看其宣告順序)

七、static 資料成員不占用類的空間,對其派生類亦是如此。

C 類成員在記憶體中的儲存及對齊方式

前言 資料對齊的基本理論參見文章 一 空類的大小 c 中空類的大小是1,這是因為空類也可以被例項化,為了確保每乙個例項在記憶體中都有乙個獨一無二的位址,編譯器往往隱含給乙個空類加乙個位元組。二 類中的成員函式與非虛成員函式 類中的非虛成員函式不占用空間,虛函式表占用四個位元組,只要有虛函式 無論有幾...

C 成員函式在記憶體中的儲存方式

用類去定義物件時,系統會為每乙個物件分配儲存空間。如果乙個類包括了資料和函式,要分別為資料和函式的 分配儲存空間。按理說,如果用同乙個類定義了10個物件,那麼就需要分別為10個物件的資料和函式 分配儲存單元,如下圖所示。能否只用一段空間來存放這個共同的函式 段,在呼叫各物件的函式時,都去呼叫這個公用...

C 成員函式在記憶體中的儲存方式

用類去定義物件時,系統會為每乙個物件分配儲存空間。如果乙個類包括了資料和函式,要分別為資料和函式的 分配儲存空間。按理說,如果用同乙個類定義了10個物件,那麼就需要分別為10個物件的資料和函式 分配儲存單元,如下圖所示。能否只用一段空間來存放這個共同的函式 段,在呼叫各物件的函式時,都去呼叫這個公用...