技术交流QQ群:1027579432,欢迎你的加入!

1.实例1如下:

  class A{
  };
  class B{
      char ch;
      int x;
  };
  class C{
  public:
      void Print(void){}
  };
  class D
  {
  public:
      virtual void Print(void){}
  };
  • Q:在32位机器上sizeof(A),sizeof(B),sizeof(C),sizeof(D)值分别为?
  • A: 1 8 1 4

2.解释如下:

  • 空类编译器会将sizeof()的值变为1;
  • 类的大小只与非静态成员变量和虚函数的大小有关,而与其他普通函数成员无关,与构造函数、析构函数也无关。类中含虚函数,编译器会自动生成一个虚函数表,类需要一个指针来指向该虚函数表,因此类的sizeof()为4;

3.实例2如下:

#include <iostream>
using namespace std;
class A {
public:
    int b;
    char c;
    virtual void print() {
        cout << "this is father’s fuction! " << endl;
    }
};
class B: A {
public:
    virtual void print() {
        cout << "this is children’s fuction! " << endl;
    }
};
int main(int argc, char * argv[]) {
    cout << sizeof(A) << "" << sizeof(B) << endl;
    return 0;
}
  • Q: 在32位操作系统gcc编译器环境下,下面程序的运行结果?
  • A: A中的内存方式是:0(int)+4(char对齐)+5+3(字节对齐补3)(A中的虚指针)=12
    B中的方式是:4(B中的虚指针)+ 4(A::int)+4(A::char对齐)=12