你真的知道C++對象大小嗎?
我們都直到char大小為1,int為4,那么C++中對象的大小是多少呢?
看三個問題:
- C++中函數(shù)占不占對象的大小
- 空類的大小是多少?
- 如果類中有虛函數(shù),類的大小是多少?
一,C++中函數(shù)占不占對象的大小
看一段代碼:

可以看出,類的大小即為類的屬性a的大小為4,函數(shù)并不占對象的大小。
那么這個的原因是什么呢?
原因:
這樣定義的好處就是為了節(jié)省空間的大小。
假設此時類中有10個函數(shù),類又定義了100個對象。如果每個對象都包含一個函數(shù)的大小,那么就需要占用1000個函數(shù)空間的位置,這樣極大的消耗了資源。
實際上類的函數(shù)是放在代碼區(qū)的,哪個對象需要調(diào)用函數(shù),則從代碼區(qū)調(diào)用,因為函數(shù)并不是對象獨有屬性,所以并不沖突,這樣僅僅占10個函數(shù)空間位置就夠了。
這樣一對比,函數(shù)放在代碼區(qū)節(jié)省了很多的資源,因此函數(shù)并不占用對象的大小。
至于對象放的位置,如果new的就在堆區(qū),不然就在棧區(qū)。
二,空類的大小是多少?
看代碼:

我們會發(fā)現(xiàn),空類的大小變成了1,正常不應該是0嗎?
這樣設置的原因是因為每一個對象實例化都需要空間,這里系統(tǒng)默認給了一個占位符,占1字節(jié)大小
三,如果類中有虛函數(shù),類的大小是多少?
看圖片:

對比上面兩種情況,空類大小為1,但是函數(shù)又不占用空間,為什么函數(shù)變?yōu)樘摵瘮?shù)卻變成了4呢?
因為當有虛函數(shù)時,編譯器會給這個類加上虛函數(shù)指針 vptr(32位是4,64位是8)
此時類中有了指針,因此對象的大小就變?yōu)榱?。
上面就是類中不同情況的大小。
總結
到此這篇關于你真的知道C++對象大小的文章就介紹到這了,更多相關C++對象大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何實現(xiàn)在C++中調(diào)用C函數(shù)
這篇文章主要介紹了如何實現(xiàn)在C++中調(diào)用C函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
C/C++?Qt?StatusBar底部狀態(tài)欄應用教程
Qt窗體中默認會附加一個QstatusBar組件,狀態(tài)欄組件位于主窗體的最下方,其作用是提供一個工具提示功能。本文主要介紹了StatusBar底部狀態(tài)欄的應用教程,需要的同學可以學習一下2021-12-12
基于C++實現(xiàn)BMI身體質(zhì)量指數(shù)計算工具
BMI(Body?Mass?Index,身體質(zhì)量指數(shù)),也稱為體重指數(shù),是一種常用的衡量成人人體肥胖程度的指標,本文就來用C++編寫一個簡單的BMI計算工具吧2023-10-10

