国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中類的大小計算方法總結(jié)

2019-11-08 01:14:08
字體:
供稿:網(wǎng)友
 C++中類的成員函數(shù),靜態(tài)成員是不占類的大小的。類的大小等于基類的大小+子類個non-static成員變量的大小再+非虛基類大小,如果有多態(tài)性還要考慮vptr(可能不止一個)大小,這里成員變量是會被字節(jié)對齊的。1、空類的大小為1字節(jié)2、字節(jié)對齊的問題     成員變量需要整齊的存儲,所以若是有不同類型的變量(本身占用字節(jié)數(shù)不同),則所有變量的大小會按照最大的的大小進(jìn)行補(bǔ)齊,比如說,若是一個類中有個bool型和int型,則bool型也會占用4個字節(jié)。若最大的為short,則bool型或者char型會補(bǔ)齊成為2個字節(jié),最大的為double,則都補(bǔ)齊成為8字節(jié)。    并且即使成員完全相同但排列不同計算出的類的大小也可能完全不同。如下例:一個類的大小可以被下面的方式改變:class   A{ bool   a; int   b; bool   c;};   //sizeof   (A)  12     這個結(jié)果可能會讓你吃驚,因為A的成員總數(shù)是6個字節(jié):1+4+1個字節(jié)。那另6字節(jié)是哪兒來的?編譯器在每個bool成員后面都插入了3個填充字節(jié)以保證每個成員都是按4字節(jié)排列,以便分界。你可以減少A的大小,通過以下方式:  class   B{ bool   a; bool   c; int   b;};   //   sizeof   (B)   8      這一次,編譯器只在成員c后插入了2個字節(jié)。因為b占了4個字節(jié),所以就很自然地把它當(dāng)作一個字的形式排列,而a和c的大小1+1=2,再加上2個字節(jié)就剛好按兩個字的形式排列B。3、虛函數(shù):如果有虛函數(shù),類的大小+4個字節(jié)。(用來存放vptr)例:class   A{        virtual   void   foo();        int   i;        char   c;};   sizeof(A)   =   12   =   vptr   +   sizeof(i)   +   (sizeof(c)   +3);class   B   :public   A{        void   foo1();        static   int   haha;        long       ll;}   sizeof(B)   =   16   =   sizeof(A)   +   sizeof(ll);4、虛基類指針:如果是虛繼承,則子類的大小為:虛基類的大小 + 4個字節(jié)(用來存放指向虛基對象的指針)+子類新增成員的大小。例: class A{ virtual   void   foo(){};    int   i;  int j;  };class C: virtual public A{    char   sz[10];};sizeof(C)  = sizeof(A) + 4 + sizeof(sz[10])  =?。保玻矗保埃玻ㄑa(bǔ)齊sz)=28
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 新丰县| 新竹县| 乌兰察布市| 临潭县| 澎湖县| 察雅县| 天长市| 赞皇县| 永寿县| 慈溪市| 长泰县| 大安市| 周宁县| 泉州市| 漳平市| 白城市| 朝阳区| 图片| 西安市| 临清市| 林甸县| 阿合奇县| 潮州市| 肥西县| 会宁县| 内黄县| 石柱| 富裕县| 获嘉县| 益阳市| 微博| 石台县| 阳西县| 丹寨县| 秦皇岛市| 白山市| 屏边| 合作市| 佳木斯市| 海口市| 天镇县|