数据结构高手里边请,堆与堆栈的区别
来源:百度知道 编辑:UC知道 时间:2024/05/14 02:40:40
堆(heap)
为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;
程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。
堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问
栈(stack)
为程序保存的一块内存区域,用来保存状态数据,
例如:过程或函数的地址,参数,有时候还包括局部变量。
所以,堆和栈的区别:一个是动态,一个是静态;
堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;
栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。
malloc , new分配的内存就是在堆上的,如果不用free, delete回收,
就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,
回收分配给这个进程的内存等资源。