码迷,mamicode.com
首页 > 其他好文 > 详细

空类及空的虚函数占多少字节

时间:2017-08-30 19:44:35      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:pre   编译   机器   信息   div   增加   函数   构造函数   内存   

运行下面的代码,输出是什么?

class A
{

};
class B
{
    public:
        B() {}
        ~B() {}
};

class C
{
public:
        C() {}
        virtual ~C() {}
};

int _tmain(int argc, _TCHAR* argv[])
{
        printf("%d, %d, %d\n", sizeof(A), sizeof(B), sizeof(C));
        return 0;
}            

答案是1, 1, 4。class A是一个空类型,它的实例不包含任何信息,本来求sizeof应该是0。
但当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占用多少内存,由编译器决定。
Visual Studio 2008中每个空类型的实例占用一个byte的空间。
class B在class A的基础上添加了构造函数和析构函数。
由于构造函数和析构函数的调用与类型的实例无关(调用它们只需要知道函数地址即可),在它的实例中不需要增加任何信息。所以sizeof(B)和sizeof(A)一样,在Visual Studio 2008中都是1。

class C在class B的基础上把析构函数标注为虚拟函数。C++的编译器一旦发现一个类型中有虚拟函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。在32位的机器上,一个指针占4个字节的空间,因此sizeof(C)是4。

空类及空的虚函数占多少字节

标签:pre   编译   机器   信息   div   增加   函数   构造函数   内存   

原文地址:http://www.cnblogs.com/quan1/p/7454688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!