对象的内存模型

1. C++的内存格局

   C++程序的内存格局通常分为四个区:

   a. 全局数据区(data area):存放全局变量,静态数据和常量。已初始化的全局变量保存在.data段,未初始化的全局变量保存在.bss段中。

   b. 代码区(code area):存放所有类成员函数和非成员函数的代码,该区域是只读的。

   c. 栈区(stack area):存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。

   d. 堆区(heap area):除a,b,c后,余下的空间都被称为堆区。

2. C++类的组成

   C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual。

   

   C++类对象中的成员变量和成员函数是分开存储的,其中:

   a. 成员变量:

      普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式。

      静态成员变量:存储于全局数据区中。

   b. 成员函数:存储于代码段中,只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。

      既然很多对象共用一块代码?代码是如何区分具体对象呢?如何知道函数内操作的是谁的成员变量呢?

      C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。函数调用的时候,会传入该对象的指针,自然就知道访问谁的数据成员。

猜你喜欢

转载自www.cnblogs.com/yanghh/p/12929574.html