技术交流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