1 / 2
文档名称:

sizeof(空类或空结构体).pdf

格式:pdf   页数:2
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

sizeof(空类或空结构体).pdf

上传人:翩仙妙玉 2012/9/16 文件大小:0 KB

下载得到文件列表

sizeof(空类或空结构体).pdf

文档介绍

文档介绍:IT-Homer 专栏
成功是优点的发挥,失败是缺点的积累! 不为失败找理由,只为成功找
方法……
sizeof(空类或空结构体)
分类: C/C++/C# 2011-07-07 12:19 745人阅读评论(0) 收藏举报
某童靴前天去理想国际某公司面试,回来在宿舍讨论了这样一道题:
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
面试回来,、 VS2010、 g++(Linux -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;
}
然后,在各编译器上编译
其结果分别如下:
(XP Professional SP2  -  32bit)
1
VS2010 (Win7 Ultimate SP1  -  64bit)
g++(Ubuntu linux -14  -  64bit)
最后,分析为何结果会是:1
这里,先看看C++多态的内部实现
例如,有三个重载函数: