堆、栈、队列概念与区别

发布时间 2024-01-10 22:21:30作者: 变秃了也就变强了

堆的特点:

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)