首先,預設的塊對齊長度是4位元組,此外也可以通過#pragma pack(x)修改,同時,自己修改完之後記得使用#pragma pack()恢復預設值。此外,又分了幾種情況:
(1)如果有虛函式,則會儲存虛函式表的位址(僅乙個位址,4位元組或8位元組),該位址是存放在類記憶體的最開始的地方。
(2)如果出現比x大的非靜態成員變數(靜態成員變數不算在類記憶體裡面,而是和函式放在一起的),則對齊長度取較大型別的尺寸值。
(3)所有成員變數之間的先後位置不受虛函式影響,而且儲存的先後位置和定義變數時的先後順序是一樣的(這樣似乎就可以通過調整成員變數定義的先後順序來節省記憶體啦)。
(4)所有變數的儲存位址都是該變數型別的尺寸的整數倍。
C 測試類大小中的記憶體對齊問題
為什麼是8啊,把char c注釋掉結果是4,把int a 注釋掉結果是1.但是為什麼在一起就是8了。不明白清前輩指教!以下為對此種現象的解釋 原來是記憶體對齊造成的。英文名叫做memory alignment 大部分16位和32位的cpu不允許將字或者長字儲存到記憶體中的任意位址.比如motorol...
C 類的記憶體對齊
記憶體對齊。對下面的類 class b 大家可以猜一下類 b物件的大小。如果你猜是18 4 2 8 4 也不能說你錯。但是你用 sizeof b 一看,結果竟然是 24!多出來的 6個位元組是怎麼回事呢?其實是記憶體對齊搞的鬼。在編譯器的結構成員對齊設定為預設的情況下,分配給各個成員變數的記憶體大小...
C 類和物件(二) 記憶體對齊
物件的引入 類的例項化 在c 物件導向這門語言中,不僅需要類這種將所有相同事物合併在一起的結構,還需要針對於這個空殼 類 進行建立物件 例項化物件 建立出乙個乙個的具有這種類屬性和方法的單位,就叫做物件。class people int main 物件的作用 當使用者建立出眾多的物件之後,肯定是需要...