關於C 類記憶體的一些小試驗

2021-10-08 04:04:53 字數 1086 閱讀 8246

看了一些關於c++類記憶體的文章,有了一些粗淺的了解,來做幾個小試驗檢驗我自己的認知。

試驗用計算機是64位的。

理論上類記憶體的大小應該是非靜態資料成員的大小加上虛指標的大小再考慮記憶體對齊。先來乙個簡單的。

class

base

~base()

private

:int a;

char b;

};

這個類有多大呢,64位機中int為4位元組,char為1位元組,但這裡應該要4位元組對齊,因此為4+4=8位元組。

稍微搞麻煩一點,這裡再定義乙個派生類派生自上面的基類。

class

derived

:public base

~derived()

private

:static

float c;

double d;

};

這個類有多大呢,前面已經說了靜態成員是不算的,因此這裡只要加上double的8位元組就行了,一共是8+8=16位元組。

現在再對上述基類和派生類作如下改變。

class

base

virtual

~base()

private

:int a;

char b;

string* p1;

base* p2;};

class

derived

:public base

virtual

~derived()

private

:static

float c;

double d;

};

現在我把基類析構函式宣告成虛函式,在基類中又加了2個指標。因此要算上虛指標的大小,和兩個指標的大小。以及64位機中指標大小是8位元組,因此基類和派生類的大小變成了32位元組和40位元組。

注:由於我了解得不深,因此自己也寫不出複雜好玩的例子,今後如果想到什麼有意思的內容再補充。

小試驗,關於Ruby類的祖先鏈

對於理解ruby的方法查詢過程,祖先鏈概念非常重要,相同模組在原祖先鏈的類中多次混入時,新祖先鏈如何呢,做了乙個小試驗 module m end module m1 end module m2 end class myclass include m include m1 endclass mysub...

關於C 類的一些小知識點

1 賦值運算子過載為什麼要有返回值?答 為了支援連等的時候的呼叫 t3 t3 t1 void main 2 兩個show函式有什麼區別?void show void show const void show const test const this 這就意味著this是常量,this也是常量 cl...

關於C 語言的記憶體管理的一些小知識

在這篇部落格中,來簡單介紹一下在c 語言的一點記憶體管理的小知識,在這之前我還寫了一篇關於c語言的記憶體管理的小知識,如果感興趣的同學可以翻到前面看一下那篇部落格,給小弟增加點瀏覽量。話不多說,進入正題 c 記憶體管理方式 c語言記憶體管理方式在c 中可以繼續使用,但有些地方就無能為力而且使用起來比...