C++面向对象(七):对象的内存、内存布局与管理
对象的内存
对象的内存可以存在于3种地方
- 全局区(数据段):全局变量
- 栈空间:函数里面的局部变量
- 堆空间:动态申请内存(malloc、new等)
// 全局区
Person g_person;
int main() {
// 栈空间
Person person;
//堆空间,取决于Person需要多少空间
// 这里指针对象在栈空间
Person *p = new Person;
return 0;
}
对象的内存布局
类中有多个成员变量时的内存布局
class Person {
public:
int m_id = 1;
int m_age = 2;
int m_height = 3;
void display() {
cout << "m_id is " << m_id << endl;
cout << "m_age is " << m_age << endl;
cout << "m_height is " << m_height << endl;
}
};
这里一个person对象占12个字节,成员变量之间在内存中是连续的,是没有空隙的,并且按照类中的定义顺序存放,第一个地址值就是person对象与它的属性m_id的地址值,这里由于都是int类型,所以不需要内存对齐。
![](https://i-blog.csdnimg.cn/blog_migrate/f76c1872e6e2528b673859be875fd5f4.png)
可以看到,实际上与预期是一样的:
int