C 類占用空間計算方式

2021-10-10 01:56:39 字數 511 閱讀 2172

1、乙個類占用的空間主要是屬性占用空間,而成員函式一般不占用空間,但是虛函式占用空間,需要說明的是,無論多少個虛函式,只要占用4個位元組即可,也就是索引指向乙個虛擬表的首位置。另外需要說明的是占用空間都考慮了對齊,所以不足4個的按照滿4個的算。

2、類的繼承,子類占用空間是父類基礎上增加本類空間即可。所以說可以認為,子類就是直接拷貝了父類的內容,然後結合自身的內容。而且儲存空間也是這個順序,即先父類分配空間,然後才是子類空間。

3、靜態成員變數不占用類空間,應該是確實沒有放入這個類的裡面,而且沒有指標指向它,只能通過類::來訪問,也就是說靜態成員是隨著類的存在而存在,而 不依賴於物件,它的存在意義主要還是區分,否則如何確定其意義,這還是體現了相關的都方一起的思想,比全域性變數或者常量更方便使用和理解。

4、需要說明的是,虛函式對應的虛擬表在空間的其他位置,和物件是沒有聯絡的,但是虛擬表位址是和類統一的,也就是說一旦確定,無論在哪個物件中,其指標 值是一樣的,即虛擬表位置是一定的。指標放在物件的最前面,首先是指向虛函式的虛擬表指標,然後才是其他成員變數空間。

C 類占用空間計算方式

1 乙個類占用的空間主要是屬性占用空間,而成員函式一般不占用空間,但是虛函式占用空間,需要說明的是,無論多少個虛函式,只要占用4個位元組即可,也就是索引指向乙個虛擬表的首位置。另外需要說明的是占用空間都考慮了對齊,所以不足4個的按照滿4個的算。2 類的繼承,子類占用空間是父類基礎上增加本類空間即可。...

類占用空間的計算

例如 class c sizeof 類 計算的是類中存在棧中的變數的大小,而類中的b和 c都是static靜態變數,存在全域性區中,因此不在計算範圍之內,於是只剩下char a,void p和兩個virtual虛函式,a是char型別,占用乙個位元組,p是指標,在64位系統的指標占用8個位元組,而兩...

C 類裡面,函式占用儲存空間問題

先看兩段 段1 class a class1 物件例項 vptr m data1 m data2 通過vptr指標找到虛函式表 vtable 虛函式表 vfunc1 vfunc2 vfunc3 class1 vfunc1 class1 vfunc2 class1 vfunc3 所以回到原來的問題,a...