最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入分析C++中類的大小

 更新時間:2013年05月04日 09:20:40   作者:  
本篇文章深入分析了C++中類的大小問題。需要的朋友參考下

首先看一個例子:

復(fù)制代碼 代碼如下:

#include <iostream>
 using namespace std;

 class A{};

 class B
 {
     int b;
     char c;
 };

 class C
 {
     int c1;   
     static int c2;
 };
 int C::c2 = 1;

 class D:public C,public B{
     int d;
 };
 int main()
 {
     cout<<"sizeof(A)="<<sizeof(A)<<endl;
     cout<<"sizeof(B)="<<sizeof(B)<<endl;
     cout<<"sizeof(C)="<<sizeof(C)<<endl;
     cout<<"sizeof(D)="<<sizeof(D)<<endl;

     return 0;
 }

運行結(jié)果為:

sizeof(A)=1

sizeof(B)=8

sizeof(C)=4

sizeof(D)=16


對于類A來說,雖然A是一個空類,但為了便于空類進行實例化,編譯器往往會給它分配一個字節(jié),這樣A實例化后便在內(nèi)存中有了一個獨一無二的地址.對于類B,B的大小應(yīng)為sizeof(int)+sizeof(char)=5,但是考慮內(nèi)存對齊,B的大小應(yīng)為8.對于類C,類的靜態(tài)成員變量被放在全局區(qū),和類的普通成員并沒有放在一塊。類的靜態(tài)成員被聲明后就已存在,而非靜態(tài)成員只有類被實例化后才存在。所以C的大小為sizeof(int)=4。D的大小為B+C的大小+自身數(shù)據(jù)成員的大小,一共為16.

 

==========================分割線在這里====================================

下面討論含有虛函數(shù)的類的大小:

復(fù)制代碼 代碼如下:

#include <iostream>
 using namespace std;

 class A
 {
 public:
     void virtual aa(){};
 };

 class B:public A
 {
     void virtual bb(){};
 };

 class C:virtual A
 {
 public:
     void virtual aa(){};
     void cc(){};
 };

 class D:virtual A
 {
 public:
     void virtual dd(){};
 };

 int main()
 {
     cout<<"sizeof(A)="<<sizeof(A)<<endl;
     cout<<"sizeof(B)="<<sizeof(B)<<endl;
     cout<<"sizeof(C)="<<sizeof(C)<<endl;
     cout<<"sizeof(D)="<<sizeof(D)<<endl;

     return 0;
 }

運行結(jié)果為:

sizeof(A)=4

sizeof(B)=4

sizeof(C)=8

sizeof(D)=12

對于class A,它含有一個虛函數(shù),編譯器會為虛函數(shù)生成一張?zhí)摵瘮?shù)表,來記錄對應(yīng)的函數(shù)地址,為此,在class A的內(nèi)存地址中要有一個vfptr_A指針指向這個虛表,所以class A的大小為指針大小,即4.(注意,無論類中有多少個虛函數(shù),它們的大小都是4,因為內(nèi)存中只需要保存這個指針即可)。

對于class B,它是public繼承A,雖然它也有一個虛函數(shù),但是從結(jié)果看,B應(yīng)該和A都在B的vtable(虛表中),所以class B的大小為4.

對于class C,它是vitual 繼承A,所以要有一個指向父類A的指針,占有4字節(jié)大小aa()是繼承自class A的虛函數(shù),從結(jié)果來看,它沒有在內(nèi)存中占有空間,所以C的大小為sizeof(A)+4=8.

對于class D,它是虛繼承class A,同上,要有一個指向父類A的指針,同時,class D中有虛函數(shù),所以要有一個指向虛表的指針,所以sizeof(D)=sizeof(A)+4+4=12

相關(guān)文章

最新評論

建宁县| 南京市| 湟中县| 安远县| 车致| 凤山县| 宁强县| 会昌县| 城口县| 石景山区| 鹰潭市| 宁都县| 襄樊市| 肥城市| 克山县| 岳阳市| 南和县| 垦利县| 额尔古纳市| 收藏| 文登市| 阿克| 武穴市| 铅山县| 平谷区| 苍山县| 灵川县| 龙泉市| 榕江县| 福贡县| 湾仔区| 文化| 甘洛县| 合肥市| 麻江县| 都江堰市| 吉木萨尔县| 长垣县| 石阡县| 浦县| 湖州市|