《深度探索c 物件模型》學習筆記 附錄

2021-04-24 23:27:09 字數 1994 閱讀 7170

1.

關於整個書,我覺得如果能夠把各種類的

sizeof

搞定,就肯定

ok了。所以請參看另一篇文章"

sizeof

大全":

物件在記憶體中的布局(不考慮

padding

,太複雜;只使用

int,並假設

sizeof(int) == 4byte

;ide

是vc6.0

)。

記憶體

記憶體

1)

class a;

class b;

class c: public a, public b; x

a zb n

c 2)

class a;

class b;

class d: a, b;

vptr a

xvptr b

y zc

3)

class a;

class b;

class d: a, b;

vptr a

x yb z

c 4)

class a;

class b1: a;

class b2: a;

class c1: virtual b1;

class c2: virtual b2;

class d: c1, c2;

這個比較**,注意:相對於b1和

b2來說,

a只是普通基類。a在

d中根本就沒有被共享

offset ** c1

c1offset ** c2

c2 d

d aa b1

b1 a

a b2

b2

5)

class a;

class b: virtual a;

class c: virtual a;

class d: b, c;

(右面**:可能是

offset to a

,也可能是

b中自帶的

vptr

。書上說是前者;根據分析應該是這樣

)offset ** b

z1offset ** c

z2 d

dvptr a

x 6)

class a;

class b:virtual a;

class c:virtual a;

class d: b, c;

(注意:d的

vptr

肯定是和其基類共享了,但b、

c的vptr還在)

offset ** b

vptr z1

offset ** c

vptr z2

d dvptr a

x 7)

class x;

class y1: virtual x;

class y2: virtual x;

class z1: y1;

class z2: y2;

class w: z1, z2;

offset ** y1

y1 z1

z1offset ** y2

y2 z2

z2 w

w xx

至此,《深度探索c++物件模型》學習筆記 系列全部結束。

《深度探索c 物件模型》學習筆記

封裝並未給c 帶來任何的空間或執行期的不良後果,c 在布局和訪問時間上的主要額外負擔由虛擬化引起。包括 1 virtual function機制。用以支援乙個有效率的 執行期繫結 2 virtual base class機制。用以實現 多次出現在繼承體系中的base class,有乙個的單一而被共享...

《深度探索C 物件模型》學習筆記

1.轉型其實是一種編譯器指令,大部分情況下它並不改變乙個指標所含的真正位址,它只影響 被指出之記憶體的大小和內容 的解釋方式.2.global objects的記憶體保證會在程式啟動的時候被清為0,local objects配置於程式的堆疊中,heap objects配置於自由空間中,都不一定會被清...

深度探索c 物件模型學習筆記之物件

在c 中,有兩種資料成員 靜態的和非靜態的,以及三種類成員函式 靜態的 非靜態的和虛函式。已知如下class point宣告 class point 考慮乙個問題,class point在機器中是怎麼表現的呢?簡單物件模型 簡單物件模型,是為了降低c 編譯器的設計複雜度,賠上了空間和執行器的效率而開...