你真的知道C++物件大小嗎?
阿新 • • 發佈:2021-01-10
我們都直到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。
上面就是類中不同情況的大小。
總結
到此這篇關於你真的知道C++物件大小的文章就介紹到這了,更多相關C++物件大小內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!