面试冲刺:01---C++类的内存大小

一、情景一

  • 问:定义一个空的类型,里面没有任何成员变量和成员函数。对该类型求sizeof,得到的结果为1
  • 答:为什么是0,而不是1:空类型的实例不包含任何信息,本来求sizeof应该为0,但是当我们声明该类型的实例时,其必须在内存中占用一定的空间,否则无法使用这些实例。置于占用多少内存,由编译器决定。在Visual Studio中,每个空类型的实例占用1字节

面试冲刺:01---C++类的内存大小

  • 问:如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得到的结果为多少
  • 答:和上面一样,还是1。因为函数不存放于类内,编译器不会为这两个函数的存在而在实例内添加任何额外的信息

面试冲刺:01---C++类的内存大小

  • 问:如果把析构函数标记为虚函数哪?
  • 答:C++的编译器发现一个类型中有虚函数,就会为该类生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。在32位的机器上,一个指针占4字节。如果是64位的机器,则占用8字节

面试冲刺:01---C++类的内存大小

二、情景二