转载自:http://c.biancheng.net/cpp/biancheng/view/2995.html点击打开链接
当对象被创建时,编译器会为每个对象分配内存空间,包括成员变量和成员函数。
直观的认识是,如果定义了10个对象,那么就要分别为这10个对象的变量和函数分配内存空间,如下图所示:
虽然每个对象的成员变量不同,但是成员函数的代码却是一样的,上面的内存模型保存了10份相同的代码片段,浪费了很多空间。
事实上,编译器会将成员变量和成员函数分开存储:分别为每个对象的成员变量分配内存,但是所有对象都共享同一段函数代码。如下图所示:
请看下面的一个例子:
#include<iostream>
using namespace std;
class Demo{
public:
int a;
float b;
void display();
};
void Demo::display(){
cout<<"a="<<a<<", b="<<b<<endl;
}
int main(){
Demo obj;
obj.a = 1;
obj.b = 2;
obj.display();
return 0;
}假设 obj 的起始地址为 0X1000,那么它的内存分布如下图所示:
a、b 都为 int 类型,占用4个字节内存,并且按照声明时的顺序依次排列,所以 obj 对象总共占用8个字节的内存。读者可以使用
sizeof(obj)语句亲测。
对象的大小只受成员变量的影响,和成员函数没有关系。成员函数在 代码区分配内存,而不是在栈区。
本文详细解释了C++中对象的内存布局原理,重点介绍了成员变量与成员函数如何存储,以及这种存储方式如何帮助节省内存空间。通过具体示例说明了对象大小仅由成员变量决定,而成员函数则位于独立的代码区。
4521

被折叠的 条评论
为什么被折叠?



