三、内存的使用
对于程序员,我们最重要的是能理解不同进程间私有内存空间的含义。C 和 C++的编
译器把私有内存分为 3 块:基栈、浮动栈和堆。如下图:
(1)基栈:也叫静态存储区,这是编译器在编译期间就已经固定下来必须要使用的
内存,如程序的代码段、静态变量、全局变量、const 常量等。
(2
“ ”
)浮动栈:很多书上称为 栈 ,就是程序开始运行,随着函数、对象的一段执行 ,
函数内部变量、对象的内部成员变量开始动态占用内存,浮动栈一般都有生命周期,函数
结束或者对象析构,其对应的浮动栈空间的就拆除了,这部分内容总是变来变去,内存
占用也不是固定,因此叫浮动栈。
(3)堆:C 和 C++语言都支持动态内存申请,即程序运行期可以自由申请内存,这
部分内存就是在堆空间申请的。堆位于 2GB 的最顶端,自上向下分配,这是避免和浮动
栈混到一起,不好管理。我们用到 malloc 和 new 都是从堆空间申请的内存,new 比 malloc
多了对象的支持,可以自动调用构造函数。另外,new 创建对象,其成员变量位于堆里面。
我们来看一个例子:
const int n = 100;
void Func(void)
{
char ch = 0;
char* pBuff = (char*)malloc(10);
//…
}
这个函数如果运行,其中 n 由于是全局静态变量,位于基栈,ch 和 pBuff 这两个函
数内部变量,ch 位于浮动栈,而 pBuff 指向的由 malloc 分配的内存区,则位于堆栈。