首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我发现_declspec(novtable)并没有减小对象的大小

2013-10-01 
我发现__declspec(novtable)并没有减小对象的大小.MSDN上面说__declspec(novtable)使得编译器不会为这个类

我发现__declspec(novtable)并没有减小对象的大小.
MSDN上面说__declspec(novtable)使得编译器不会为这个类产生虚表,也就不会给类对象的头部放一个虚表指针.
我做了一个小实验:


class __declspec(novtable)Base
{
int i;
public:
virtual void f();
virtual void g();
};
class __declspec(novtable)Child:public Base
{
public:
void f(){}
};
class C:public Child
{
};
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d,%d,%d\n",sizeof(Base),sizeof(Child),sizeof(C));
return 0;
}

在32位系统上,我期待的输出是4,4,8。但是实际输出的是8,8,8.
看起来对象的虚表指针还是生成了啊。我用VS2012编译的Debug/Release版结果都是这样的。
究竟是为什么呢?

[解决办法]
看看msdn吧,http://msdn.microsoft.com/en-us/library/k13k85ky.aspx,不要光看字面意思。

热点排行