调用栈

✍ dations ◷ 2025-11-16 00:40:09 #计算机编程

调用栈(英语:Call stack,港台称“呼叫堆叠”,英文直接简称为“栈”(the stack))别称有:执行栈(execution stack)、控制栈(control stack)、运行时栈(run-time stack)与机器栈(machine stack),是计算机科学中存储有关正在运行的子程序的消息的栈。有时仅称“栈”,但栈中不一定仅存储子程序消息。几乎所有计算机程序都依赖于调用栈,然而高级语言一般将调用栈的细节隐藏至后台。

调用栈最经常被用于存放子程序的返回地址。在调用任何子程序时,主程序都必须暂存子程序运行完毕后应该返回到的地址。因此,如果被调用的子程序还要调用其他的子程序,其自身的返回地址就必须存入调用栈,在其自身运行完毕后再行取回。在递归程序中,每一层次递归都必须在调用栈上增加一条地址,因此如果程序出现无限递归(或仅仅是过多的递归层次),调用栈就会产生栈溢出。

调用栈的主要功能是存放返回地址。除此之外,调用栈还用于存放:

以下MIPS汇编语言程序计算 3 2 + 4 2 {\displaystyle 3^{2}+4^{2}} ,并将结果存至寄存器s0

main:    li      $a0, 3    li      $a1, 4    jal     sumsq    move    $s0, $v0    j       mainendsumsq:    addi    $sp, $sp, -4        # 在堆疊上分配空間    sw      $ra, 0($sp)         # 將sumsq的返回位址存入堆疊中    jal     square    move    $t0, $v0    move    $a0, $a1    jal     square    add     $v0, $v0, $t0    lw      $ra, 0($sp)         # 從堆疊中取回sumsq的返回位址    addi    $sp, $sp, 4         # 釋出堆疊上分配的空間    jr      $rasquare:    mult    $a0, $a0    mflo    $v0    jr      $ramainend:

这里,主程序(main)调用“sumsq”子程序并将返回地址存入寄存器ra,但是“sumsq”子程序需要调用“square”子程序。为保证sumsq的返回地址不被重写,这个地址被存储在栈中。在square子程序返回后,sumsq再从栈中取回其自身的返回地址。

在较底层语言(如汇编语言与C语言中),程控消息与数据可能一同被存入调用栈中,因此造成安全隐患,可能允许恶意程序通过栈缓冲区溢出(stack buffer overflow)来获取程序的控制权。

相关

  • 丹曲林单挫林是一种突触后肌肉松弛剂,可减轻骨骼肌的收缩。它透过抑制兰诺定受体(Ryanodine receptor)来阻止从肌质网释放钙离子以达成治疗效果。单挫林用来治疗和预防因全身麻醉而引
  • 日本温泉列表日本温泉一览是依照《温泉法》,将日本的温泉地点依照各都道府县列出的一览表。按日本图例,温泉在日本的地图上常用温泉记号(♨)标示。北海道 青森县 | 岩手县 | 宫城县 | 秋田
  • 居斯塔夫·埃菲尔亚历山大·古斯塔夫·埃菲尔(Alexandre Gustave Eiffel,1832年12月15日-1923年1月27日)祖先来自德国。他是一位法国工程师,金属结构专家,也是一位作家。出生于法国第戎,一开始他想
  • 北美松鼠灰松鼠(学名:Sciurus carolinensis;英语:eastern gray squirrel、grey squirrel)是一种原生于美国东部及中西部以及加拿大东部省份的树松鼠。它是一种多产且适应性很强的松鼠,后来
  • 容止格言衣镜铭,又称“四十字镜箴”,是南开学校在张伯苓、严修主校期间为了培养和规范学生的仪表和举止而在当时南开中学东楼中的过道左侧(一说校门入口处一侧 )的一面一人高的大镜子上
  • 江户开城江户开城是指日本江户时代末期(幕末)的庆应4年(1868年)的3至4月间(旧历),旧幕府(德川宗家)在经过与明治新政府军队(东征大总督府(日语:東征大総督))的一系列谈判后将江户移交给新政府的事
  • 吟游诗人在中世纪盖尔及凯尔特布立吞人文化中,一位吟游诗人(高卢语:Bardos,英语、苏格兰盖尔语及爱尔兰语:Bard,威尔士语:Bardd,布列塔尼语:Barzh或Barz )是一位专精于叙说故事(包含口述历史及
  • 欧石楠逾七百种,当中包括: 欧石楠(学名:)是指杜鹃花科欧石楠属的植物。全球大约有七百多种的欧石楠,当中大部分都产自南非,被称为“南非特有种的皇后”;另外尚有七十多个物种大
  • 鲍尔绍伊·伊什特万鲍尔绍伊·伊什特万(匈牙利语:Balsai István,1947年4月5日-2020年3月1日),匈牙利律师,政治人物,前司法部长(1990年-1994年)。1947年4月5日生于米什科尔茨。父亲是检察官,母亲是教师。19
  • 济南轨道交通4号线济南轨道交通4号线(又称济南地铁4号线),工程名为M3线,是中华人民共和国济南市规划中的一条地铁线路。项目全长43.3公里,共设32站,预计于2020年动工,工期5年。线路西起小高庄站,东至