内 存 分 为 代 码 区 、 全 局 数 据 区 、 堆 区 和 栈 区 。堆一般存 放动态数据,栈里一般存放局部成员。 关 于 堆 栈 和 堆 的 概 念 [问题] C++中 创 建 本 地 ( 或 者 说 局 域 ) 变 量 是 在 堆 栈 ( stack) 中 分 配 内 存 地 址 , 而 创建 全 局 变 量 则 是 在 堆 ( heap) 中 分 配 内 存 地 址 。 我 想 知 道 什 么 是 堆 ( heap) ?为 什 么 全 局 变 量 和 本 地 变 量 在 分 配 内 存 地 址 时 要 分 别 对 待 ,堆 和 堆 栈 哪 一 个 更 有效 率 ? [回答] 在 Window中执行的每一个应用程序都有其自己的内 存 地址。一部分 内 存 空间用于存 放程序代码,一部分 内 存 空间用于存 放程序执行期间创建的变量。创将变量的方法有两种,一种是在堆中,另外一种则在堆栈里。 理解堆的最好的方法是将它看成一个程序随时可以使用的内 存 块。为 了 创 建 堆 变量 , 程 序 要 使 用 “new”( 在 C++里) 操作符或 者 “malloc”( 在 C中 ) 例程 ,它们返回指向变量的指针(堆变量总是通过指针来处理和操作)。最后程 序用 “delete”( 在 C++里) 操作符或 者 “free”( 在 C中 ) 例程 来删除或 者 释放内 存 空间。 而堆栈则不同,它是某个函数被调用后随时可以创建的一小块内 存 ,被用于在函数范围内 保存 变量(也称为 自动变量)。在 函数 中 , 任何包含在 {}内 的 代 码 都有其自己的 堆 栈 。当这个函数或者{}退出时,堆栈以及它包含的所有内 容都被摧毁。因此下面的代码是不运行的: void Myfunction() { int i = 5; { int j = 6; } int k = i + j; } 所 以 本 文 问 题 的 答 案 是 :使 用 堆 栈 ( stack) 分 配 本 地 或 者 局 域 变 量 的 地 址 空 间 ,而 用 堆 ( heap) 分 配 大 块 内 存 地 址 或 者 动 态 创 建 对 象 的 情 形 。 例 如 : void MyFunction() { int i = 5; // 堆 栈 中 的 本 地 (自 动 )变 量 int *iArray; // 堆 栈 中 的 本 地 (自 动 )变 量 iArray = new int[10000]; // 这 一 行 代 码 将 在 堆 中 创 建10000个 元 素 的...