关于“堆栈”的含义及理解

本文介绍了堆栈的概念,包括它的存储原理、操作(push和pull)、在函数调用和中断处理中的作用。同时,对比了栈和堆的区别,如分配方式、效率和内存管理。堆栈溢出是指存储空间不足导致的数据溢出,形象地比喻为瓶子装满水后的溢出。最后,讨论了栈和堆在程序执行中的生命周期及其对效率的影响。
摘要由CSDN通过智能技术生成

 其实平时所讲的堆栈一般都指栈,为了好听我们叫它堆栈==

1.什么是堆栈?

堆栈是一段连续的存储器空间,主要有两个动作:推入push和取出pull,遵循先入后出,后入先出原则,堆栈可以用来完成参数传递和返回值的传递(函数调用),也可以用来保存局部变量、寄存器的值,典型用处是中断,保存案发现场(函数执行断点)。

:栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量、函数返回地址、寄存器内容等。函数中定义的局部变量按照先后定义的顺序依次压入栈中(从高地址开始放),栈中存储的数据的生命周期随着函数的执行完成而结束。栈的效率比较高。

:由开发人员分配和释放(由malloc()函数申请,free()函数释放), 也因此容易造成大量的内存碎片,效率较低。若开发人员不释放,程序结束时由 OS 回收。堆的内存地址生长方向与栈相反,由低到高,但需要注意的是,后申请的内存空间并不一定在先申请的内存空间的后面,因为先申请的内存空间一旦被释放,后申请的内存空间则会利用先前被释放的内存,从而导致先后分配的内存空间在地址上不存在先后关系。堆中存储的数据若没有被释放,则其生命周期等于程序的生命周期。

2.什么是堆栈溢出?

存放地址时从高地址开始存放(瓶底),当存放不下了,就从瓶口溢出了。

存放的过程也可以看做,最开始栈顶和栈底是重合的,每存进来一个数据,栈顶就往上移一格。

cube里:

 大概就理解了这些==以后如果有学到其他的再进行补充======================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值