调用栈

✍ dations ◷ 2025-08-24 01:52:26 #计算机编程

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

相关

  • 肌肉痛肌肉痛(英语:Myalgia),如字面意思所言——肌肉疼痛,是多种疾病的症状,其最常见的成因是肌肉(群)的过度拉伸、过度使用。没有肌肉创伤史的肌肉痛则通常是由病毒感染所引起,而长期肌肉
  • 酶联免疫吸附法酶联免疫吸附试验(又称酵素免疫分析法,Enzyme-linked immunosorbent assay (ELISA),简称酶联法)利用抗原抗体之间专一性键结之特性,对检体进行检测;由于结合于固体承载物(一般为塑
  • 简称简称(英语:For short 或 Contraction)是一个名称的简短称呼,在多种语言内都有此用法。在欧洲诸语言中,当特定的前置词和冠词连续时,其连接成为一个词的现象。在英语里简称是一个单
  • 590110 数学 120 信息科学与系统科学 130 力学 140 物理学 150 化学 160 天文学 170 地球科学 180 生物学210 农学 220 林学 230 畜牧、兽医科学 240 水产学310 
  • 四川四川省(满语:ᠰᡟᠴᡠᠸᠠᠨ ᡤᠣᠯᠣ,穆麟德:sycuwan golo),为清朝的内地十八省的一个省。1645年,设立陕西三边四川总督,驻西安府,十一月,设湖广四川总督。1649年,设立四川巡抚。1653
  • 心跳骤停心脏停止(Cardiac arrest)或称为心搏停止,是心脏因不能够有效收缩,而导致血液循环停止的现象,症状包含丧失意识(英语:Unconsciousness)、呼吸异常或中止(英语:respiratory arrest),有些
  • 冯巩冯巩(1957年12月6日-),男,汉族,祖籍河北河间,生于天津,中国相声、电影演员。现任中国国民党革命委员会中央委员会副主席、全国政协常务委员。他是曾代理中华民国大总统的直系军阀创
  • 阮大正阮大正,台湾美国著名报人,现任美西华人学会、新群学会会长。籍贯浙江余姚县临山,出自阮性存家族,祖父阮性存为大律师,父亲阮毅成为国民党元老。是阮毅成次子,兄阮大元社会学家;下有
  • 阿兰·古斯麻省理工学院科学奖 奥斯卡·克莱因奖章 (1991) 富兰克林奖章 艾萨克·牛顿奖章(2009) 狄拉克奖章 格鲁伯宇宙学奖 (2004) 基础物理学突破奖 (2012) 阿兰·哈维·古斯(英语:Al
  • 天使铁路天使铁路(英语:Angels Flight Railway)是位于美国加州洛杉矶邦克山市中心的缆索铁路,是当地的著名地标之一;天使铁路全长99米,它被列入为美国国家史迹名录之外,也是世界最短的缆索