堆栈相关知识【整理】
翻译自:堆栈
堆栈有好几个作用,其中最主要的就是,记录/存储了一些指针,这些指针指向当前活动的子程序完成时候所要返回的地址。
一般情况下,一个正在运行的程序/任务/进程/线程,对应着一个堆栈。
(在某些情况下,为了信号处理或进程间合作,会为其额外创建堆栈。)
高级语言编程时,堆栈的调用等细节,不需要程序员关心,只需直接调用你要调用的函数即可。
但是大多数汇编程序员在编程的时候,需要自己处理堆栈的操作。
而堆栈的操作细节,与编译器,操作系统,可用的指令集等有关。
堆栈用于保存返回地址,相对于其他替代方法,有如下优点:
1. 每个任务都有自己的堆栈,因此,子程序可以被重载,可重入,也就是,可以同时处于激活状态,为不同的任务做不同的事情。
2. 自动地支持函数递归调用。当一个函数调用其自己的时候,每一个处于活动状态的函数的返回地址都要被存储,以用于完成时候的函数返回。堆栈自动地就具有此功能。
堆栈还具有其他一些功能:
1. 局部数据存储
2. 参数传递
3. Evaluation Stack
4. 保存指向当前实例的指针
5. 闭包子函数的上下文
6. 其他返回状态
一个堆栈调用,包含了一系列的 堆栈帧,有时候也叫做,活动记录,activation records,这是个体系结构相关的,包含子程序的状态信息的数据结构。
每一个 堆栈帧,对应着一个,被调用,但是还没结束返回的函数。
以DrawSquare调用DrawLine为例,图示如下:
在某些情况下,比如,某些语言支持从栈上动态申请空间,那么,在函数被编译的时候,对于本地区域部分大小,就因不同的调用而不同了。
转载请注明:在路上 » 堆栈相关知识【整理】