background image

 
  三、内存的使用
  对于程序员,我们最重要的是能理解不同进程间私有内存空间的含义。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 分配的内存区,则位于堆栈。