【C++】類中成員函數的存儲方式以及計算類的大小

【C++】類中成員函數的存儲方式以及計算類的大小

來自專欄編程語言

想更好的了解請看我的博客:【C++】類中成員函數的存儲方式以及計算類的大小 - CSDN博客

顯然,這樣做會大大節約存儲空間。C++編譯系統正是這樣做的,因此每個對象所佔用的存儲空間只是該對象的數據部分(虛函數指針和虛基類指針也屬於數據部分)所佔用的存儲空間,而不包括函數代碼所佔用的存儲空間

類大小的計算:

  • 空類的大小為1(用於區分對象)

  • 類的大小,實際就是該類中「成員變數」之和。(都要遵從內存對齊)

  • 不論成員函數在類內定義還是類外定義,成員函數的代碼段的存儲方式是相同的,都不佔用對象的存儲空間。

  • 不論是否用inline聲明,成員函數的代碼段都不佔用對象的存儲空間。(inline函數隻影響程序的執行效率而與成員函數是否佔用對象的存儲空間無關)

  • 第一個成員在與結構體變數偏移量為0的地址處

  • 其他成員變數要對齊到某個數字(對齊數)的整數倍的地址處。

注意:對齊數=編譯器默認的一個對齊數與該成員大小的比較後的較小值。(vs中默認的值為8,gcc中默認的值為4)

  • 結構體總大小為最大對齊數(每個成員變數除了第一個成員都有一個對齊數)的整數倍

  • 如果嵌套了結構體的情況下,嵌套的結構體對齊到自己最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含嵌套結構體的對齊數)的整數倍

推薦閱讀:

人腦為什麼這麼大?與遠古時期的惡劣環境有關|科技牛
科學家尋找尼斯湖水怪DNA,能否最終揭示尼斯湖水怪是否存在?
太陽能殺蟲燈出現自燃現象的原因有哪些
上周最佳天文圖片(NASA-APOD中文版)4.30-5.6
白茶,大自然的能量銀行

TAG:特殊函數 | 函數 | 自然科學 |