data structure
堆和栈的区别
- July 13, 2009
- mikzzz
堆和栈的区别
从管理方式上:栈是由编译器自动管理,无需我们手动控制;
对于堆,开辟和释放工作由程序员控制,所以有内存泄漏等情况的发生。
从申请大小上:栈是有高地址向低地址扩展的,是一块连续的内存区域,所以栈的栈顶地址或者大小 是一开始就分配好的。在使用过程中,比如递归调用层数过多,那么就有可能造成栈溢出,所以栈能获得的空间比较少;
堆是向高地址扩展的,是链表组织的方式,所以有可能是不连续的,他的大小只受限于有效的虚拟内存大小,所以堆能开辟的空间较大。
从碎片问题上:栈是没有碎片的情况,因为他有严格的出栈入栈,不会存在一个内存块从栈的中间位置弹出;
堆有碎片的情况,频繁的调用new/delete分配释放内存,必然会造成内存碎片。