C++:類的虛函數及虛繼承所佔的空間

來源:互聯網
上載者:User

char佔用一個位元組, 但不滿足4的倍數時, 會進行資料對齊, 使用4的倍數的位元組(byte).

GCC:

GCC中, 無論是虛函數還是虛繼承, 都需要將指標儲存在虛函數表(virtual function table), 佔用4個位元組.

繼承會繼承基類的資料, 和虛函數表, 即繼承基類的空間.

代碼:

/*  * test.cpp  *  *  Created on: 2014.04.20  *      Author: Spike  */      /*eclipse cdt, gcc 4.8.1*/      #include <iostream>        using namespace std;        class A {      char k[5];  public:      virtual void aa() {};  };        class B : virtual public A {      char j[6];  public:      virtual void bb() {};  };        class C : virtual public B {      char i[7];  public:      virtual void cc() {};  };        int main() {      std::cout << "sizeof(A) = " << sizeof(A) << std::endl;      std::cout << "sizeof(B) = " << sizeof(B) << std::endl;      std::cout << "sizeof(C) = " << sizeof(C) << std::endl;            return 0;  }

輸出:

sizeof(A) = 12  sizeof(B) = 24  sizeof(C) = 36

VS:

VS中, 正常情況下, 所有虛函數都寫在一個虛函數表中, 即衍生類別使用基類的虛函數表, 不會建立位元組的虛函數表;

如果使用虛繼承, 則衍生類別, 建立虛函數表和虛繼承表, 即額外增加8個位元組(兩個表);

輸出:

作者:csdn部落格 Spike_King

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.