我們都直到char大小爲1,int爲4,那麼C++中對象的大小是多少呢?
看三個問題:
- C++中函數佔不佔對象的大小
- 空類的大小是多少?
- 如果類中有虛函數,類的大小是多少?
一,C++中函數佔不佔對象的大小
看一段代碼:
可以看出,類的大小即爲類的屬性a的大小爲4,函數並不佔對象的大小。
那麼這個的原因是什麼呢?
原因:
這樣定義的好處就是爲了節省空間的大小。
假設此時類中有10個函數,類又定義了100個對象。如果每個對象都包含一個函數的大小,那麼就需要佔用1000個函數空間的位置,這樣極大的消耗了資源。
實際上類的函數是放在代碼區的,哪個對象需要調用函數,則從代碼區調用,因爲函數並不是對象獨有屬性,所以並不衝突,這樣僅僅佔10個函數空間位置就夠了。
這樣一對比,函數放在代碼區節省了很多的資源,因此函數並不佔用對象的大小。
至於對象放的位置,如果new的就在堆區,不然就在棧區。
二,空類的大小是多少?
看代碼:
我們會發現,空類的大小變成了1,正常不應該是0嗎?
這樣設置的原因是因爲每一個對象實例化都需要空間,這裏系統默認給了一個佔位符,佔1字節大小
三,如果類中有虛函數,類的大小是多少?
看圖片:
對比上面兩種情況,空類大小爲1,但是函數又不佔用空間,爲什麼函數變爲虛函數卻變成了4呢?
因爲當有虛函數時,編譯器會給這個類加上虛函數指針 vptr(32位是4,64位是8)
此時類中有了指針,因此對象的大小就變爲了4。
上面就是類中不同情況的大小。