簡體   English   中英

對象/結構的C ++內存布局是什么?

[英]What is the C++ memory layout of objects/structs etc?

在C ++中,我認為C ++標准與數據成員在內存布局方面的排列方式無關? 我是否正確地認為這取決於有問題的編譯器?

我非常有興趣了解對象和其他C ++實體(結構等)如何在物理內存中表示(我知道列表是節點到節點,數組是連續內存 - 但語言的所有其他方面)。

編輯:學習x86匯編程序有助於此更好地理解C ++嗎?

C ++標准確實指定了一些東西,但遠非一切。

主要規則如下:

  • 數組中的對象是連續布局的,它們之間沒有填充。
  • 未被訪問說明符( public: / private: / protected:分隔的類成員對象按照它們聲明的順序在內存中排列,但成員對象之間可能存在未指定數量的填充。
  • 對於某些類型(標准布局結構,在標准術語中),第一個基類,或者如果不存在,第一個成員,布局在類本身的同一地址。

標准指定了更多的部分,但總的來說,剩下的細節實際上歸結為編譯器。

是的,標准沒有說明如何在內存中表示對象。 要了解如何表示規范的C ++對象,請閱讀本書: 內部C ++對象模型。

檢查這些鏈接以了解C ++類的布局(“PCASM”一書中有關於它們如何表示的完整章節)

http://forums.codeguru.com/archive/index.php/t-428671.html http://www.drpaulcarter.com/pcasm/pcasm-book-pdf.zip

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM