Welcome

首页 / 软件开发 / C++ / sizeof: 空类或空结构体

sizeof: 空类或空结构体2013-02-05某童靴前天去理想国际某公司面试,回来在宿舍讨论了这样一道题:

VC++里,有一个空类,没有声明任何成员变量或函数,请问此空类占多大字节空间?

A、 0           B、 1            C、 4           D、8

当时考虑了32bit和64bit机器,并且指针地址是int型,32bit占4个字节或64bit占8个字节,因此选了C和D

后又想想,这没有操作指针,也就不需内存对齐(视VC++编译器会自动进行对齐优化),排除了C和D,选择了A

当时也考虑过侯捷老师译著的那本《深度探索C++对象模型》,C++中继承与多态在编译器中是如何区分的,所以0字节也不靠谱

但至少也不会仅占一个字节吧,因此当时首先就把B彻底killed

面试回来,在VC6.0、 VS2010、 g++(Linux 2.6.31-14)上编译,发现结果居然是:1

首先,我贴出测试代码:

#include <iostream> using namespace std;// 空类class ClassA{};// 继承空类的空类class ClassB : public ClassA{};// 空结构体struct StructC{};// 主函数int main(int argc, char **argv){cout<<"A: "<<sizeof(ClassA)<<endl;cout<<"B: "<<sizeof(ClassB)<<endl;cout<<"C: "<<sizeof(StructC)<<endl;return 0;}
然后,在各编译器上编译

其结果分别如下:

VC6.0 (XP Professional SP2  -  32bit)

VS2010 (Win7 Ultimate SP1  -  64bit)