码迷,mamicode.com
首页 > 编程语言 > 详细

C++对象模型(内存布局)

时间:2017-09-15 20:30:30      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:end   排列   位置   size   类对象   没有   ptr   函数   int   

如果是一个空类,sizeof(A) = 1

C++的成员包含:非static数据成员,static数据成员,非static成员函数,static成员函数,virtual成员函数。

如类

class Person
{
public:
    Person():m_id(0),m_age(20) { ++m_count; }
    virtual ~Person() { --m_count; }
    virtual void print()
    {
        cout << "id:" << m_id
            << "age:" << m_age << endl;
    }    
    void work()
    {
        cout << "working" << endl;
    }
    static int personCount()
    {
        return m_count;
    }
private:
    static int m_count;
    int m_id;
    int m_age;
};

只有非static数据成员被放置于每一个类对象中(在内存中的存放顺序与声明顺序一致),非static数据成员和成员函数都被放置在类对象之外。

如果没有virtual成员函数 sizeof(Person) = 8

如果有virtual成员函数,虚指针被放在对象的第一个位置,后边排列数据成员。sizeof(Person) = 16,附:64位机器下指针类型长度是8

如果是单一继承关系:子类先放vptr;再放父类数据成员;最后放子类数据成员。

 

参考http://blog.csdn.net/ljianhui/article/details/45903939

C++对象模型(内存布局)

标签:end   排列   位置   size   类对象   没有   ptr   函数   int   

原文地址:http://www.cnblogs.com/xuelei/p/7528062.html

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