c 物件模型

2021-10-07 04:42:13 字數 992 閱讀 4540

原文:

簡單物件模型:

為所有成員建立乙個slot,也就是乙個指標,讓這個指標指向資料

在簡單物件模型下,因為類的函式成員,資料成員都沒有直接放到物件模型中(放入的是指向成員的指標),因此可以解決「因menbers不同因而需要不同的儲存空間」(沒明白書上這句話的意思)的問題。

優點:簡單

缺點:每增加乙個成員,物件模型就得增加乙個指標,記憶體與成員數量成線性關係

每次訪問member,都需要通過slot索引

**驅動物件模型:

將物件成員分成兩類,資料成員,函式成員,並將它們分別放在資料成員表,函式成員表中。

然後生成兩個分別指向資料成員表,函式成員表的指標。

優點:縮小了物件模型記憶體,解決了簡單物件模型記憶體與成員線性關係的問題

在物件的非靜態成員資料改變,其餘不變時不需要重新編譯

缺點:難以支援多型

由於有**的存在,因此每次查詢成員時多了一次定址,以確定在**中具體的位置

c++物件模型:

為虛函式建立虛表,並由虛表指標指向虛表,通過虛表確認具體呼叫的虛函式

每乙個class所關聯的type_info oject也由virtual table被指出(用來支援 執行時型別識別),通常放在虛表的第乙個位置。

非靜態成員資料儲存在物件模型中

非虛成員函式和全域性函式型別,放在**區,不儲存在物件模型中

優點:查詢資料通過基位址+偏移量查詢

支援多型

對於非虛成員函式,直接根據位址就可以呼叫,相對於**驅動物件模型不必要多定址一次。

c 物件模型

很久之前就想總結一下c 的記憶體使用機制。直到現在剛考完試之制,去實習之前,才有時間完成這事。1.程式使用記憶體區 乙個程式占用的記憶體區一般分為5種 1 全域性 靜態資料區 儲存全域性變數及靜態變數 包括全域性靜態變數和區域性靜態變數 2 常量資料區 儲存程式中的常量字串等。3 區 儲存程式的 4...

C 物件模型

很久之前就想總結一下c 的記憶體使用機制。直到現在剛考完試之制,去實習之前,才有時間完成這事。1.程式使用記憶體區 乙個程式占用的記憶體區一般分為5種 1 全域性 靜態資料區 儲存全域性變數及靜態變數 包括全域性靜態變數和區域性靜態變數 2 常量資料區 儲存程式中的常量字串等。3 區 儲存程式的 4...

C 物件模型

簡單物件模型 乙個c 物件儲存了所有指向成員的指標,而成員本身不儲存在物件中。也就是說不論資料成員還是成員函式,也不論這個是普通成員函式還是虛函式,它們都儲存在物件本身之外,同時物件儲存指向它們的指標。示意圖如右。簡單物件模型對於編譯器來說雖然極盡簡單,但同時付出的代價是空間和執行期的效率.顯而易見...