数据结构高手里边请,堆与堆栈的区别

来源:百度知道 编辑:UC知道 时间:2024/05/14 02:40:40

堆(heap)
为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;
程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。
堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问

栈(stack)
为程序保存的一块内存区域,用来保存状态数据,
例如:过程或函数的地址,参数,有时候还包括局部变量。

所以,堆和栈的区别:一个是动态,一个是静态;
堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;
栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。

malloc , new分配的内存就是在堆上的,如果不用free, delete回收,
就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,
回收分配给这个进程的内存等资源。