型別記憶體模型(物件記憶體模型)

2022-07-01 15:45:09 字數 608 閱讀 5550

型別的記憶體模型的3個問題:

1、包含什麼:附加資訊

2、怎麼布局:記憶體對齊

3、使用場景:怎麼使用附加資訊

除了包含結構型別的顯式成員變數外,型別記憶體模型需要解決附加資訊的引入問題

1、附加資訊(opaque)有哪些:

型別資訊、函式資訊、繼承資訊、記憶體計數等;

2、為什麼有附加資訊:

1)解決多型問題;

2)解決型別執行時資訊問題;

3)解決型別的執行時記憶體管理問題(引用計數)。

3、附加資訊怎麼包含進去:三個方案:

1)型別本身隱式自帶(opaque成員);

2)編譯器定製處理:編譯器針對型別引入(c++的虛函式表);

3)編譯器引入中間容器型別:swift的存在容器;

詳見記憶體布局;

1、多型機制:

函式的呼叫解釋:

1)虛函式表的查詢、繫結與呼叫;

2)型別資訊的查詢與使用

2、記憶體模型的記憶體自管理:

引用計數;

3、容器中間型別的使用:

編譯器實現,開發者不可見;型別的打包、解包

4、執行時型別資訊:

開發者呼叫型別資訊介面獲取;

物件記憶體模型

物件物件模型 物件在記憶體是如何存放的 存放規則 1.class記憶體對齊規則和struct相同。2.class 成員函式和成員變數分開存放,每個物件有獨享的成員變數 堆疊全域性資料 同一類的所有物件共享同一成員函式 段 3.呼叫成員函式時將物件位址傳遞給成員函式 隱式傳遞 成員函式通過物件位址 t...

python物件記憶體模型

首先介紹一下python物件的記憶體模型,如下圖1所示 圖1.pyobject物件記憶體模型 上圖可以看到,乙個pyobject必須包含ob refcnt和ob type 這兩個屬性 ob refcnt是這個物件的引用計數,而ob type則是指向 typeobject結構體的指標,它是python...

類 物件的記憶體模型

原問題如下 include using namespace std class base void fun2 int main 的結果為4。這個我覺得是因為那個虛函式表裡的乙個指標佔了4個位元組 但是如果我去掉virtual 的結果為1 類中的普通成員函式佔物件的空間嗎?資料成員所佔空間的計算是否也...