C++類的內存分布


C++一般類的內存分布

一下都是在x64下進行的編譯

 

1、空類

 

 

2、無繼承、無虛函數類

 

 

3、無繼承、有虛函數類

 

 

4、有繼承、有虛函數類

 

 

C++繼承類的內存分布

 

 

 

 

 

C++多重繼承時的內存分布

#include <iostream>
using namespace std;

class A {
public:
    int a;
};

class B1 :  public A {
public:
    int b1;
};

class B2 :  public A {
public:
    int b2;
};

class C : public B1, public B2 {
public:
    int c1;
};

int main() {
    
    cout << "A_size=" << sizeof(A) << endl;
    cout << "B1_size=" << sizeof(B1) << endl;
    cout << "B2_size=" << sizeof(B2) << endl;
    cout << "C_size=" << sizeof(C) << endl;
    cout << "end..." << endl;
    system("pause");
    return 0;
}

 

 

 

 

類A、B1、B2的內存分布

 

 

 

類C的內存分布

 

 

 

 

 

C++類虛繼承時的內存分布---->虛繼承解決二義性的問題

#include <iostream>
using namespace std;

class A {
public:
    int a;
};

class B1 : virtual public A {
public:
    int b1;
};

class B2 : virtual public A {
public:
    int b2;
};

class C : public B1, public B2 {
public:
    int c1;
};

int main() {
    C  c1;
    c1.b1 = 100;
    c1.b2 = 200;
    c1.c1 = 300;

    c1.a = 500; //虛繼承使得成員變量a只有一份拷貝,通過虛指針可以確定地址

    cout << "A_size=" << sizeof(A) << endl;
    cout << "B1_size=" << sizeof(B1) << endl;
    cout << "B2_size=" << sizeof(B2) << endl;
    cout << "C_size=" << sizeof(C) << endl;
    cout << "end..." << endl;
    system("pause");
    return 0;
}

 

 

 

類A和B1的內存分布

 

 

 

類B2的內存分布

 

 

 

類C的內存分布

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM