调用栈

✍ dations ◷ 2025-11-12 22:34:31 #计算机编程

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

相关

  • 幽闭恐惧症幽闭恐惧症是对密闭空间的一种焦虑症,患者在某些情况下,例如电梯、车厢、隧道或者机舱内,可能发生恐慌症状态,或者害怕会发生恐慌症状。反过来说,容易恐慌症发作的人,通常也会产生
  • 静脉曲张静脉曲张(英语:Varicose veins)是不正常扩张的静脉。它的英文是源自拉丁文varix。静脉曲张的类型包括:患有下肢静脉曲张者的小腿静脉会明显凸出,甚至出现不雅观的膨胀和扭曲。静
  • 归哈哈侨归国哈侨(哈萨克语:Оралман,意为“归国者”),是哈萨克斯坦当局的官方术语,指哈萨克独立后移民至哈萨克的哈萨克族。通常来自邻近的中国,蒙古国,乌兹别克斯坦,俄罗斯,吉尔吉斯斯
  • 欧亚莺欧亚莺(学名:)是一种常见、分布广泛的莺属(英语:typical warbler)鸟类。它背部呈橄榄灰色,腹部为浅灰色,各个亚种间差异很小。欧亚莺的雌性和雄性的头部均有彩色花斑,其中雄性为黑色,
  • 高梦旦高梦旦(1870年-1936年),名凤谦,字梦旦,以字行,福建长乐龙门乡人(今航城街道龙门村)。商务印书馆元老。少时他不追求仕途,好经世致用之学。1901年,他任浙江大学堂总教习。1902年,他率留学
  • 蔡建国蔡建国(1953年-),浙江绍兴人,汉族,中华人民共和国政治人物,第十一届全国政协委员、第十二届全国政协委员。加入中国致公党,担任致公党中央常委、上海市副主委、上海市政府侨办副主任
  • 松田竹千代松田竹千代(日语:松田 竹千代/まつだ たけちよ,1888年2月2日-1980年12月1日),日本政治家。曾担任众议院议长、文部大臣、邮政大臣等职务。为正三位勲一等。第一次鸠山一郎内阁 (模板
  • 岛津齐彬岛津齐彬(1809年4月28日-1858年8月24日),日本江户时代的大名,萨摩藩第十一代藩主、岛津氏第二十八代当主,文化六年三月十四生。幼名邦丸,通称又三郎,法名惟敬、麟洲,戒名顺圣院殿英德
  • 唐焕唐焕(?-?),字蕴华,号右文,山东青州府益都县人。明朝政治人物。父唐尧典,字宪庵。万历四十年壬子中举,四十四年丙辰科第二甲第二十四名进士。初授户部主事,历户部浙江司员外郎,直隶保定
  • 竹之子族竹之子族(日语:竹の子族),亦可称竹笋族,是一种在1979年崛起、于1980年代初期广为流行过的日本街头表演文化。“竹之子”在日文里面其实就是竹笋的意思,但竹之子族起源与真正的竹子