调用栈

✍ dations ◷ 2024-09-20 08:55:43 #计算机编程

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

相关

  • 麦伦普塔麦伦普塔(英语:Merneptah)古埃及新王国时期第十九王朝的第四任法老。(约公元前1213年7月或8月—约公元前1203年5月2日在位),作为拉美西斯二世第十三子,由于与之较长的十二位兄弟早
  • 升交点黄经升交点经度(符号是☊ 或 Ω)是用来具体描述天体在空间中轨道的轨道要素之一。它是由参考方向(经度原点 )起始,在参考平面上量度至昇交点的角度。通常作为经度原点和参考平面的有:
  • 乏力虚弱、无力、乏力(英语:weakness或asthenia)是一种症状的统称,有着多种不同的用法。该症状的成因多种多样,可细分为真性肌无力(true muscle weakness),或者体感肌无力。真性肌无力是
  • 拿骚拿骚(Nassau)这名词可能拥有下列几种意义:
  • 理查德·卡普理查德·曼宁·卡普(英语:Richard Manning Karp,1935年1月3日-),计算机科学家以及计算理论家。为柏克莱加州大学教授,在算法理论方面有卓越的贡献,因此获得1979年的富尔克森奖,1985年
  • 赫苏斯·洛佩斯·科沃斯赫苏斯·洛佩斯·科沃斯(西班牙语:Jesús López Cobos,1940年2月25日-2018年3月2日)是西班牙指挥家。1940年2月25日出生于托罗。先后在马拉加音乐学院和马德里皇家音乐学院学习
  • 高雄软体科技园区高雄软体科技园区,简称高雄软体园区、高软,面积7.9公顷,是设于高雄市前镇区之智能科技园区,也是全国唯一靠海的科技园区,致力于发展亚太地区资讯软件、数位影音、电脑通讯等产业
  • 2014年纽约影评人协会奖第80届纽约影评人协会奖(英语:The 80th New York Film Critics Circle Awards)于2014年12月1日授奖,本次最大赢家是《少年时代》。
  • 越瓜菜越瓜菜(朝鲜语:월과채)是朝鲜族一种用粉丝制成的风味食品,源自朝鲜王朝的宫廷料理。其中“越瓜”在朝鲜语中指甜瓜,然而如今多被西葫芦所替代。其他的主要成分有香菇、牛肉、糯米
  • 爱德华·修斯爱德华·修斯(德语:Eduard Suess,德语:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gent