内 存 分 为 代 码 区 、 全 局 数 据 区 、 堆 区 和 栈 区
堆一般存 放动态数据,栈里一般存放局部成员
关 于 堆 栈 和 堆 的 概 念 [问题] 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