关于C++类内存的一些小试验

    看了一些关于C++类内存的文章,有了一些粗浅的了解,来做几个小试验检验我自己的认知。
    试验用计算机是64位的。
    理论上类内存的大小应该是非静态数据成员的大小加上虚指针的大小再考虑内存对齐。先来一个简单的。

class Base{
public:
    Base(){}
    ~Base(){}
private:
    int a;
    char b;
};

    这个类有多大呢,64位机中int为4字节,char为1字节,但这里应该要4字节对齐,因此为4+4=8字节。
    稍微搞麻烦一点,这里再定义一个派生类派生自上面的基类。

class Derived: public Base{
public:
    Derived(){}
    ~Derived(){}
private:
    static float c;
    double d;
};

    这个类有多大呢,前面已经说了静态成员是不算的,因此这里只要加上double的8字节就行了,一共是8+8=16字节。
    现在再对上述基类和派生类作如下改变。

class Base{
public:
    Base(){}
    virtual ~Base(){}
private:
    int a;
    char b;
    string* p1;
    Base* p2;
};
class Derived: public Base{
public:
    Derived(){}
    virtual ~Derived(){}
private:
    static float c;
    double d;
};

    现在我把基类析构函数声明成虚函数,在基类中又加了2个指针。因此要算上虚指针的大小,和两个指针的大小。以及64位机中指针大小是8字节,因此基类和派生类的大小变成了32字节和40字节。

注:由于我了解得不深,因此自己也写不出复杂好玩的例子,今后如果想到什么有意思的内容再补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值