您好,登錄后才能下訂單哦!
這篇文章給大家介紹詳解C++中對象的大小,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
看三個問題:
C++中函數占不占對象的大小
空類的大小是多少?
如果類中有虛函數,類的大小是多少?
看一段代碼:
可以看出,類的大小即為類的屬性a的大小為4,函數并不占對象的大小。
那么這個的原因是什么呢?
原因:
這樣定義的好處就是為了節省空間的大小。
假設此時類中有10個函數,類又定義了100個對象。如果每個對象都包含一個函數的大小,那么就需要占用1000個函數空間的位置,這樣極大的消耗了資源。
實際上類的函數是放在代碼區的,哪個對象需要調用函數,則從代碼區調用,因為函數并不是對象獨有屬性,所以并不沖突,這樣僅僅占10個函數空間位置就夠了。
這樣一對比,函數放在代碼區節省了很多的資源,因此函數并不占用對象的大小。
至于對象放的位置,如果new的就在堆區,不然就在棧區。
看代碼:
我們會發現,空類的大小變成了1,正常不應該是0嗎?
這樣設置的原因是因為每一個對象實例化都需要空間,這里系統默認給了一個占位符,占1字節大小
看圖片:
對比上面兩種情況,空類大小為1,但是函數又不占用空間,為什么函數變為虛函數卻變成了4呢?
因為當有虛函數時,編譯器會給這個類加上虛函數指針 vptr(32位是4,64位是8)
此時類中有了指針,因此對象的大小就變為了4。
上面就是類中不同情況的大小。
關于詳解C++中對象的大小就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。