某童靴前天去理想国际某公司面试,回来在宿舍讨论了这样一道题:
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)
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索指针
, 编译器
, 结构体指针
, 函数
, 空指针
, 字节
, c++ 结构体
, structc++
, 模板structc++图形
, structc++class
, 代码structc语言函数
, structc语言
, structc#
空类
判断结构体是否为空、c 结构体 可为空、c判断结构体是否为空、清空结构体、空结构体,以便于您获取更多的相关知识。