C++对象的内存布局---简单对象

 C++对象的内部结构及实现和编译器紧密相关.这里主要介绍Windows下的VC++和GNU的gcc编译器.
  • 简单对象.   C++对象中包含成员数据和成员函数.其中成员数据分为静态成员数据和非静态成员数据.成员函数分为静态成员函数,非静态成员函数和虚函数.

class simpleClass //由sizeof得到该对象是12个字节.
{
    public:
       static int nCount;//存放在全局静态存储区中,不作为对象占据内存的一部分
       int nValue;//在对象占据的内存中,4字节
       char c;//1字节,而在32位计算机上为了提高效率,使之4字节对齐,故占据4字节.

    simpleClass();
    virtual  ~simpleClass();//C++在碰到含有虚函数的类时,会分配一个指针指向一个函数地址表:虚函数表,占据4字节.


    virtual  void foo();
    int getvalue();//对于静态成员函数和非静态成员函数,C++编译器采用和普通C函数类似的方法进行编译,只不过对函数名进行了名称修饰,用来支持重载,并且在参数列表中增加了一个this指针,用来表明是哪一个对象调用了该函数.因此静态成员函数和非静态成员函数的多少对对象的大小没有影响.
    static void addCount();
};

 由上分析,可得出以下结论:

1 .  非静态数据成员是影响对象占据内存的主要因素,        

2 .   所有对象共享一份静态数据成员.

3 . 静态成员函数和非静态成员函数不影响对象内存的大小,虽然其实现会占据相应的内存空间.

4.  如果对象包含虚函数, 会增加4个字节的空间,不论有多少个虚函数.

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值