C 類物件記憶體大小的計算?

時間 2021-06-09 03:28:18

1樓:木頭雲

你可以參考下我的這篇部落格:

《關於記憶體對齊的那些事》 http://

darkc.at/about-data-structure-alignment/

2樓:拉格朗曰

敢問題主用的什麼牌子的編譯器?

這是無virtual的

這是有virtual的

其中記憶體對齊部分參考《深度探索c++物件模型》

關於vptr

我認為是這樣的

count(2)+2(對齊)+x(4)+y(4)+vptr(4)=16

因為是win32程式故記憶體對齊應該4的倍數,所以sizeof結果應該為16。

至於24的版本,我認為題主使用的編譯器中的vptr為8byte,記憶體對齊也為8的倍數。

24=vptr(8)+count(2)+2(對齊)+x(4)+y(4)+4(對齊)

@vczh

@魏凡丁

3樓:

各成員變數存放的起始位址相對於結構的起始位址的偏移量必須為該變數的型別所占用的位元組數的倍數。各成員變數在存放的時候根據在結構中出現的順序依次申請空間,同時按照上面的對齊方式調整位置,空缺的位元組自動填充。

同時為了確保結構的大小為結構的位元組邊界數(即該結構中占用最大空間的型別所占用的位元組數)的倍數,所以在為最後乙個成員變數申請空間後,還會根據需要自動填充空缺的位元組。

為什麼azure的記憶體大小這麼奇怪

LeonT 宿主機的部分資源分配給了hypervisor 包括磁碟IO處理 網路IO處理等任務 有些同學可能會問那幹嘛不在宿主機多配置點記憶體?因為宿主機已經是記憶體滿配了,一般雲計算的宿主機都是滿配的,這樣平均成本才能攤的最低。不光azure,早期AWS也是一樣,一些例項型別記憶體容量 缺斤短兩 ...

將java物件記憶體釋放橋接到C 的delete上去,對於GC有什麼影響?

dwing 你的想法其實很多人都想過了,但很少見到在自動管理記憶體的系統中提供手動delete,最關鍵的原因就是這會把一門以記憶體安全當做最主要優勢打破了.只要引入手動delete,那麼所有的記憶體誤用都可能出現,包括 野指標 釋放後繼續訪問 多次delete乙個指標.解決這些問題對JVM來說即使在...

C 中類的大小是否會影響快取命中率?

zr scat 類大小會,類的結構也會,類的訪問順序也會。歸根道理需要理解cache是做什麼的。如果類當次訪問不在cache中,則會載入這個資料附近的記憶體,這時候下次訪問資料的cache命中率完全取決於離上次訪問有多遠。如果是相鄰資料,則基本上可以命中,如果類例項在棧,其中乙個成員指標指向的空間在...