社区
C++ 语言
帖子详情
堆栈是不是就是指令?
lnklo
2010-01-24 01:15:25
一种特殊的数据传送指令在内存里执行的?
还是内存里有专门的一块固定的区执行压入和弹出操作?
...全文
81
5
打赏
收藏
堆栈是不是就是指令?
一种特殊的数据传送指令在内存里执行的? 还是内存里有专门的一块固定的区执行压入和弹出操作?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
z569362161
2010-01-24
打赏
举报
回复
堆栈是一种执行“后进先出”算法的数据结构。
设想有一个直径不大、一端开口一端封闭的竹筒。有若干个写有编号的小球,小球的直径比竹筒的直径略小。现在把不同编号的小球放到竹筒里面,可以发现一种规律:先放进去的小球只能后拿出来,反之,后放进去的小球能够先拿出来。所以“先进后出”就是这种结构的特点。
堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。
堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的。
堆栈可以用数组存储,也可以用以后会介绍的链表存储。
下面是一个堆栈的结构体定义,包括一个栈顶指针,一个数据项数组。栈顶指针最开始指向-1,然后存入数据时,栈顶指针加1,取出数据后,栈顶指针减1。
堆和栈是两个不同的概念。
简单的来讲堆(heap)上分配的内存,系统不释放,而且是动态分配的。栈(stack)上分配的内存系统会自动释放,它是静态分配的。运行时栈叫堆栈。栈的分配是从内存的高地址向低地址分配的,而堆则相反。
由malloc或new分配的内存都是从heap上分配的内存,从heap上分配的内存必须有程序员自己释放,用free来释放,否则这块内存会一直被占用而得不到释放,就出现了“内存泄露(Memory Leak)”。这样会造成系统的可分配内存的越来越少,导致系统崩溃。
题外:很多人认为在程序中尽量使用堆而不使用栈,因为堆栈溢出很危险。其实堆溢出比栈溢出更危险。哈哈~!
http://topic.csdn.net/u/20100112/09/59dfad10-8602-4976-be78-e679956add99.html?seed=627053173&r=62648969#r_62648969
cattycat
2010-01-24
打赏
举报
回复
堆栈就是内存空间,栈是静态分配的,操作方式就像先进后出这种,所以叫栈。
healer_kx
2010-01-24
打赏
举报
回复
不是,栈是一个存储空间。你调用一个函数的时候,这个函数的参数和局部变量,也就是和这个函数息息相关的数据会存到栈上。
clhposs
2010-01-24
打赏
举报
回复
没有栈 就没有了函数
很多东西都不能方便的使用 因为寄存器数量是有限的!
superlee19
2010-01-24
打赏
举报
回复
简单说来,所有程序最终都会运行在机器的内存中
但是堆和栈还是有一定区别
拿栈来举例,比如一段代码执行,其中调用了其他函数,假设被调用的函数执行一个加法操作,有两个参数,那么在调用加法函数前需要保存当前函数的运行状态,就需要把相关信息压栈,之后再把加法函数的参数压栈进行运算,运算完成后需要执行出栈,恢复先前函数的执行。
汇编中所有的函数调用都是如此完成,只是在高级语言里这些操作由编译器完成了。
堆栈
操作
指令
.zip
堆栈
操作
指令
.zip
西门子 SIMATIC S7-200逻辑
堆栈
指令
.pdf
西门子 SIMATIC S7-200逻辑
堆栈
指令
pdf,ACD
指令
对
堆栈
杯中的第一层和第二层的值进行逻辑与操作,结果放入栈顶。执行完ACD
指令
后
堆栈
深度减1。
ARM的
堆栈
指令
详解
ARM的
堆栈
指令
详解,对于研究嵌入式的同学将有很大帮助。
arm
指令
集数据存取
堆栈
指令
分析
arm
指令
集数据存取
堆栈
指令
分析
哈理工单片机
堆栈
操作
指令
.sw
哈理工 单片机 课件
堆栈
操作
指令
.sw
C++ 语言
64,670
社区成员
250,489
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章