【编译、链接、装载十四】堆与内存管理
一、堆与内存管理
相对于栈而言, 堆这片内存面临一个稍微复杂的行为模式: 在任意时刻, 程序可能发出请求, 要么申请一段内存, 要么释放一段已申请过的内存, 而且申请的大小从几个字节到数GB都是有可能的, 我们不能假设程序会一次申请多少堆空间, 因此, 堆的管理显得较为复杂。 下面让我们来了解一下堆的工作原理。
1、什么是堆
光有栈对于面向过程的程序设计还远远不够, 因为栈上的数据在函数返回的时候就会被释放掉, 所以无法将数据传递至函数外部。 而全局变量没有办法动态地产生, 只能在编译的时候定义, 有很多情况下缺乏表现力。 在这种情况下, 堆(Heap) 是唯一的选择。
堆是一块巨大的内存空间, 常常占据整个虚拟空间的绝大部分。 在这片空间里, 程序可以请求一块连续内存, 并自由地使用, 这块内存在程序主动放弃之前都会一直保持有效。 下面是一个申请堆空间最简单的例子。
int main()
{
char