调用栈

✍ dations ◷ 2025-11-25 11:00:36 #计算机编程

调用栈(英语: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)来获取程序的控制权。

相关

  • 丁基东莨菪碱丁基东莨菪碱(Hyoscine butylbromide),商品名补斯可胖(Buscopan),是一种用于治疗腹部绞痛、食道痉挛(英语:esophageal spasm)、肾绞痛,以及膀胱过动症的药物。本品也可用于临终(英语:End
  • 宋振骐宋振骐(1935年3月10日-),中国矿山压力及岩层控制学家。1935年生于湖北汉阳。1957年毕业于北京矿业学院采煤系。山东矿业学院教授、矿山压力研究所所长。1991年当选为中国科学院
  • LRRK2n/an/an/an/an/an/an/an/an/an/aLRRK2,(富亮氨酸重复激酶2(英语:Leucine-rich repeat kinase 2),又叫震颤素(英语:dardarin)),在人类是由PARK8基因编码的一个酶。LRRK2是富亮氨酸重复激
  • 阿齐济耶阿齐济耶(阿拉伯语:العزيزية‎ ʿAziziya)是利比亚吉法拉省的一个城市,为该省首府,北距首都的黎波里41公里。人口约28万。这里亦是全球有纪录以来最热的地方。(1922年9月1
  • 镇国克洁将军汤古代汤古代(满语:ᡨᠠᠩᡤᡡᡩᠠᡳ,穆麟德:Tanggūdai,太清:Tanggvdai;1585年12月24日-1640年11月3日),爱新觉罗氏,为努尔哈赤第四子。汤古代生于明朝万历十三年(1585年)十一月初四,生母是钮祜
  • 总工会 (法国)总工会(法语:Confédération générale du travail,缩写为CGT)是一个成立于1895年法国利摩日的全国性工会组织,是法国五大工会联盟中最先成立的。法国总工会是以“劳工交易所”
  • 4-氨基-1,2,4-三唑4-氨基-1,2,4-三唑是一种有机化合物,化学式为C2H4N4。4-氨基-1,2,4-三唑可由甲酸和水合肼在水或乙腈中回流反应得到。
  • 门前典之门前典之(发音:もんぜん のりゆき / Monnzen Noriyuki,1957年-)是一位日本推理小说作家,出生于山口县下关市,毕业于熊本大学工学部建筑学科。2001年,他的处女作《建筑尸材》(原标题「
  • 电送人间电送人间(日文:でんそうにんげん)是1960年上映的日本特摄片,此部影片是福田纯的首次执导作品,东宝公司制作“变身人系列”第二部。警探们必须制止一个名为“ Telegian”的疯狂杀
  • 幺科托,简称幺,又译攸(Yocto-),是一个国际单位制词头,符号为y,它代表了10−24 或是 0.000000000000000000000001,是目前国际单位制定义下最小的单位。它在1991年被采用,字根源自于希