堆、栈、队列概念与区别
堆的特点:
1.堆为按需申请、动态分配,例如 C 中的 malloc 函数和 C++ 中的 new 操作申请内存块。
2.程序提出申请时会从堆中找出一块可用内存,在程序结束之前,操作系统不会删除已经申请的内存,而是要靠程序主动提出释放的请求(free、delete),如果使用后忘记释放,就会造成所谓的内存泄漏。
3.因为内存中的空闲空间并不是连续的,所以同一程序申请的堆内存块地址不会连续。
4.堆可以理解为当前计算机可以使用的空闲内存,但是其申请和释放都要程序员自己写代码管理。
栈的特点:
1.程序运行时自动拥有的一小块内存,用于保存局部变量的存放(或者函数调用栈的保存)。例如:在 C 中,一个局部变量int a,它存放的地方就在栈中,
2.当这个局部变量离开其作用域之后,所占用的内存则会被自动释放。
3.栈有空间有限制,一旦局部变量申请过多(例如开个超大数组),或者函数调用太深(例如递归太多次),那么就会导致栈溢出(Stack Overflow),操作系统这时候就会直接把你的程序杀掉。
4.入栈(push)和出栈(pop),只能在栈顶进行数据增删,体现了其先进后出(First In Last Out)的特性
队列的特点:
1.队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列采用的FIFO(first in first out)机制。
参考资料:
(99+ 封私信 / 80 条消息) 什么是堆?什么是栈?他们之间有什么区别和联系? - 知乎 (zhihu.com)
什么是“堆”,"栈","堆栈","队列",它们的区别 - GuoXY - 博客园 (cnblogs.com)
本文来自博客园,作者:变秃了也就变强了,转载请注明原文链接:https://www.cnblogs.com/lichangyi/p/17957436