设为首页 加入收藏

TOP

C++中类对象的内存布局(二)
2012-11-13 13:36:42 来源: 作者: 【 】 浏览:804
Tags:对象 内存 布局

    三、只有成员函数的Size

    class Car

    {

    public:

    Car(){};

    ~Car(){};

    public:

    void Fun(){};

    };

    void main()

    {

    int size = 0;

    Car objCar;

    size = sizeof(objCar);

    printf("%s %d /r", "Class Car Size:", size);

    }

    输出结果:Class Car Size:1

    噢,这是怎么回事儿呢?再做一个实验看看。

    class Car

    {

    public:

    Car(){};

    ~Car(){};

    public:

    void Fun(){};

    private:

    int nLength;

    int nWidth;

    };

    void main()

    {

    int size = 0;

    Car objCar;

    size = sizeof(objCar);

    printf("%s %d /r", "Class Car Size:", size);

    }

    输出结果:Class Car Size:8

    这次应该很清楚的了。函数是不占用类空间的。第一个例子中的Size为1个字节,正是编译器为类创建一个隐含的一个字节的空间

    class Car

    {

    public:

    Car(){};

    virtual ~Car(){};

    public:

    void Fun(){};

    };

    void main()

    {

    int size = 0;

    Car objCar;

    size = sizeof(objCar);

    printf("%s %d /r", "Class Car Size:", size);

    }

    输出结果:Class Car Size:4

    这次,让析构函数为虚函数,看到了Class Size为4.这正是指向Virtual Table的指针vptr的Size.这正好符合了,结论中的第三条:加上为了支持虚函数,产生的额外负担。

    到此为止,一个Class Object究竟占用多少内存空间,已经完全说清楚了。但是,这只是针对单独类,或者说是基类适用。对于子类,却不一样了。有兴趣的朋友可以做一些实验。

      

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC 中的ATL和 MFC有什么区别 下一篇c++文件读取,字符串相关

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: