sizeof()的內(nèi)存測量

#include <iostream>
using namespace std;

class Fruit{
   int no;
   double weight;
   char key;
public:
   void print() {   }
   virtual void process(){   }
};
   
class Apple: public Fruit{
   int size;
   char type;
public:
   void save() {   }
   virtual void process(){   }
};

int main()
{
    int size;
    Fruit f;
    Apple a;
    cout << sizeof(Fruit) << " " << sizeof(f)
         << endl;
    cout << sizeof(Apple) << " " << sizeof(a);
    
    return 0;
}

Fruit對應(yīng)的輸出是32
Apple對應(yīng)的輸出是40

為什么呢?
因為有兩個容易被忽略的因素:

  1. 字節(jié)對齊
  2. 虛函數(shù)指針

字節(jié)對齊:
為了使指針+1命令安全,每一個結(jié)構(gòu)體內(nèi),需以最大結(jié)構(gòu)體內(nèi)類型所占內(nèi)存大小進(jìn)行地址對齊。
虛函數(shù)指針:
虛函數(shù)指針是用來維護(hù)虛函數(shù)表入口同一性的指針變量。用來記錄目標(biāo)虛函數(shù)對應(yīng)的虛函數(shù)表入口。同時在繼承時也成為作為父類對象的一部分被子類對象繼承。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容