设为首页 加入收藏

TOP

C++中类对象的内存布局和占用空间(四)
2012-11-17 09:29:12 来源: 作者: 【 】 浏览:1068
Tags:对象 内存 布局 占用 空间

 

    在类中又插入了一个字符型变量,结果Class Size变成了12.这个就是编译器额外添加3个字符变量,做数据对齐处理,为了是提高CPU的计算速度。编译器额外添加的东西我们是无法看见的。这也符合了结论中的第二条:加上编译器为了CPU计算,作出的数据对齐处理。

    既然,我们这样定义类成员数据编译器会额外的增加空。那么,我们何不在定义类的时候就考虑到数据对齐的问题,可以多定义出3个字符类型变量作为预留变量,既能满足数据对齐的要求,也给自己的程序添加了一些可扩展的空间。

    三、只有成员函数的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 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇浅谈二级指针 下一篇C++二维数组的动态分配

评论

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