C 中物件大小的問題

2021-06-07 03:05:50 字數 682 閱讀 1894

1) 類的所有物件都指向乙個虛函式表, 也就是說虛函式表是由類來維護的, 在編譯的時候就已經確定了

2) 物件的大小,

2.1) 當類中沒有虛函式時,並沒有乙個指標指向虛函式表, 只有當有虛函式的時候才有指標。

2.2) 當類中有靜態變數時, 物件的大小不會因為靜態變數的而改變, 靜態變數並不在物件中

2.3) 物件中只會有非靜態的成員變數, 包括本身的和父類的

2.4)記憶體對齊的問題

例子:class test;

class base1;

~base1(){};

static int test1;

int test2;

virtual void testfunc2(){};

};class base2;

};class derive1:public base1;

};class multiderive: public base1, base2;

int _tmain(int argc, _tchar* argv)

{test a;

base1 obj;

derive1 der;

multiderive multiobj;

std::cout<< sizeof(a) 《輸出:(64位環境)

1 32 //多重繼承

虛多重繼承:

C 中類物件所佔空間的大小

首先,平時所宣告的類只是一種型別定義,它本身是沒有大小可言的。因此,如果用sizeof運算子對乙個型別名操作,那得到的是具有該型別實體的大小。計算乙個類物件的大小時的規律 空類 單一繼承的空類 多重繼承的空類所佔空間大小為 1 位元組,下同 乙個類中,虛函式本身 成員函式 包括靜態與非靜態 和靜態資...

C 中類物件所佔空間的大小

c 中類物件所佔空間的大小 首先,平時所宣告的類只是一種型別定義,它本身是沒有大小可言的。因此,如果用sizeof運算子對乙個型別名操作,那得到的是具有該型別實體的大小。計算乙個類物件的大小時的規律 空類 單一繼承的空類 多重繼承的空類所佔空間大小為 1 位元組,下同 乙個類中,虛函式本身 成員函式...

c 類的物件的大小

從以上的幾個例子不難發現類的大小 0 空類的物件,物件大小是1。因為這樣,才能有唯一的位址空間與之對應。否則空類的物件陣列obj 10 中ojb 0 和 obj 1 公用位址空間了。為類的非靜態成員資料的型別大小之和 有編譯器額外加入的成員變數的大小,用來支援語言的某些特性 如 指向虛函式的指標 這...