C++對象大小,你真的知道嗎?

我們都直到char大小爲1,int爲4,那麼C++中對象的大小是多少呢?

看三個問題:

  1. C++中函數佔不佔對象的大小
  2. 空類的大小是多少?
  3. 如果類中有虛函數,類的大小是多少?

一,C++中函數佔不佔對象的大小

看一段代碼:

可以看出,類的大小即爲類的屬性a的大小爲4,函數並不佔對象的大小。

那麼這個的原因是什麼呢?

原因:

這樣定義的好處就是爲了節省空間的大小。

假設此時類中有10個函數,類又定義了100個對象。如果每個對象都包含一個函數的大小,那麼就需要佔用1000個函數空間的位置,這樣極大的消耗了資源。

實際上類的函數是放在代碼區的,哪個對象需要調用函數,則從代碼區調用,因爲函數並不是對象獨有屬性,所以並不衝突,這樣僅僅佔10個函數空間位置就夠了。

這樣一對比,函數放在代碼區節省了很多的資源,因此函數並不佔用對象的大小。

至於對象放的位置,如果new的就在堆區,不然就在棧區。

二,空類的大小是多少?

看代碼:

我們會發現,空類的大小變成了1,正常不應該是0嗎?

這樣設置的原因是因爲每一個對象實例化都需要空間,這裏系統默認給了一個佔位符,佔1字節大小

三,如果類中有虛函數,類的大小是多少?

看圖片:

對比上面兩種情況,空類大小爲1,但是函數又不佔用空間,爲什麼函數變爲虛函數卻變成了4呢?

因爲當有虛函數時,編譯器會給這個類加上虛函數指針 vptr(32位是4,64位是8)

此時類中有了指針,因此對象的大小就變爲了4。

上面就是類中不同情況的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章