堆、栈、队列概念与区别
堆的特点:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!