堆栈不是是什么具体的存储器,都是是内存,只不过有不同的用处。就像一个柜子,你可以分成一个大柜门,另一些空间可以做成些抽屉。其实都是存储,但是可以把功能更详细的分开,各自有自己的适用场合。
内存堆栈和楼上说的数据结构堆栈概念上还是有很大区别的。
这里的堆和栈不仅仅是按照数据结构里的堆和栈来理解,更倾向于表示两种不同作用的内存区域。
栈是有编译器来管理的,具体的大小可能根据编译器不同而异,编译器也可以手动设置栈的大小,通常有1M和2M的,比如在你定义变量时,由编译器将变量压栈,作用域结束,编译器控制变量出栈,程序员不能很直接的操作栈。
堆内存是向系统申请的内存,由程序员管理的,你new或者malloc时系统正常情况下回给你一块堆内存空间,你爱什么时候存数据都行,想存什么就存什么,想什么时候释放(delete,free)都可以。堆的大小没有什么具体数值,看机器的运行状况,配置状况而定。
1、满递减堆栈
特点是栈指针指向堆栈的最后一个已使用的地址,堆栈向存储器地址减小方向生长;
2、满递增堆栈
特点是指针指向堆栈的最后一个已使用的地址,堆栈向存储器地址增大方向生长;
3、空递减堆栈
特点是指SP指向堆栈的第一个没有使用的地址,堆栈向存储器地址减小方向生长;
4、空递增堆栈
特点是指SP指向堆栈的第一个没有使用的地址,堆栈向存储器地址增大方向生长。
扩展资料
堆栈是计算机科学领域重要的数据结构,它被用于多种数值计算领域,表达式求值是编译程序中较为常见的操作。
在算术表达式求值的过程中,需要使用堆栈来保存表达式的中间值和运算符,堆栈使得表达式的中间运算过程的结果访问具有了一定的自动管理能力。
大部分编译型程序设计语言具有程序递归特性,递归能够增强语言的表达能力和降低程序设计难度。递归程序的递归深度通常是不确定的,需要将子程序执行的返回地址保存到堆栈这种先进后出式的结构中,以保证子程序的返回地址的正确使用顺序。
函数式程序设计语言中,不同子函数的参数的种类和个数是不相同的,编译器也是使用堆栈来存储子程序的参数。
百度百科--ARM寻址方式
本文来自作者[图门士超]投稿,不代表雷雅号立场,如若转载,请注明出处:https://www.ajtg.com.cn/tg/5972.html
评论列表(4条)
我是雷雅号的签约作者“图门士超”!
希望本篇文章《什么是堆栈存储器》能对你有所帮助!
本站[雷雅号]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享
本文概览:堆栈不是是什么具体的存储器,都是是内存,只不过有不同的用处。就像一个柜子,你可以分成一个大柜门,另一些空间可以做成些抽屉。其实都是存储,但是可以把功能更详细的分开,各自有自己的...