sizeof()的内存测量

字数 167阅读 16
#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对应的输出是32
Apple对应的输出是40

为什么呢?
因为有两个容易被忽略的因素:

  1. 字节对齐
  2. 虚函数指针

字节对齐:
为了使指针+1命令安全,每一个结构体内,需以最大结构体内类型所占内存大小进行地址对齐。
虚函数指针:
虚函数指针是用来维护虚函数表入口同一性的指针变量。用来记录目标虚函数对应的虚函数表入口。同时在继承时也成为作为父类对象的一部分被子类对象继承。

推荐阅读更多精彩内容