C++ sizeof()函式二——類在記憶體中的分佈
阿新 • • 發佈:2020-07-18
/** * @file classcode _sizeof.cpp * @brief 1.空類的大小隻有一個位元組。 * 2.一個類中,成員函式(包括靜態與非靜態)和靜態資料成員都是不佔用類物件的儲存空間。 * 3.類中存在虛擬函式,虛擬函式本身並不佔用類物件的記憶體空間,但是有一個指向虛擬函式的虛指標,即佔用vptr的大小;並且無論存在多少虛擬函式,都只有一個vptr的大小 * 4.普通繼承,派生類繼承了所有基類的函式與成員,要按照位元組對齊來計算大小 * 5.虛擬函式繼承,不管是單繼承還是多繼承,都是繼承了基類的vptr。(32位作業系統4位元組,64位作業系統 8位元組)! * 6.虛繼承,繼承基類的vptr。 * @author major * @version v1 * @date 2020-07-07 **/ #include<iostream> using namespace std; class A{}; //1 class B{ public: char b; static int c; static int d; static int f; };//1 class C{ public: char b; virtual void fun() {}; };//16 class D{ public: char b; virtual void fun1() {}; virtual void fun2() {}; virtual void fun3() {}; virtual void fun4() {}; };//16 class E{ virtual void fun(){} };//8 class F:public E{ };//8 class G{ virtual void fun1() {} };//8 class H : virtual public E, virtual public G{ public: virtual void fun2() {} };//16 class I : virtual public E, virtual public G, virtual public D{ public: virtual void fun3() {} };//32 int main(){ //brief 1.空類的大小隻有一個 cout << "debug: sizeof(A) = " << sizeof(A) << endl; //brief 2. cout << "debug: sizeof(B) = " << sizeof(B) << endl; //brief 3. cout << "debug: sizeof(C) = " << sizeof(C) << endl; cout << "debug: sizeof(D) = " << sizeof(D) << endl; //brief 4,5 cout << "debug: sizeof(E) = " << sizeof(E) << endl; cout << "debug: sizeof(F) = " << sizeof(F) << endl; //brief 6 cout << "debug: sizeof(G) = " << sizeof(G) << endl; cout << "debug: sizeof(H) = " << sizeof(H) << endl; cout << "debug: sizeof(I) = " << sizeof(I) << endl; return 0; }