最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

堆栈相关知识【整理】

工作和技术 crifan 1788浏览 0评论

堆栈相关知识【整理】

翻译自:堆栈

堆栈有好几个作用,其中最主要的就是,记录/存储了一些指针,这些指针指向当前活动的子程序完成时候所要返回的地址。

一般情况下,一个正在运行的程序/任务/进程/线程,对应着一个堆栈。

(在某些情况下,为了信号处理或进程间合作,会为其额外创建堆栈。)

高级语言编程时,堆栈的调用等细节,不需要程序员关心,只需直接调用你要调用的函数即可。

但是大多数汇编程序员在编程的时候,需要自己处理堆栈的操作。

而堆栈的操作细节,与编译器,操作系统,可用的指令集等有关。

堆栈用于保存返回地址,相对于其他替代方法,有如下优点:

1.       每个任务都有自己的堆栈,因此,子程序可以被重载,可重入,也就是,可以同时处于激活状态,为不同的任务做不同的事情。

2.       自动地支持函数递归调用。当一个函数调用其自己的时候,每一个处于活动状态的函数的返回地址都要被存储,以用于完成时候的函数返回。堆栈自动地就具有此功能。

堆栈还具有其他一些功能:

1.       局部数据存储

2.       参数传递

3.       Evaluation Stack

4.       保存指向当前实例的指针

5.       闭包子函数的上下文

6.       其他返回状态

一个堆栈调用,包含了一系列的 堆栈帧,有时候也叫做,活动记录,activation records,这是个体系结构相关的,包含子程序的状态信息的数据结构。

每一个 堆栈帧,对应着一个,被调用,但是还没结束返回的函数。

DrawSquare调用DrawLine为例,图示如下:

在某些情况下,比如,某些语言支持从栈上动态申请空间,那么,在函数被编译的时候,对于本地区域部分大小,就因不同的调用而不同了。

转载请注明:在路上 » 堆栈相关知识【整理】

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.194 seconds, using 22.12MB memory