调用栈

✍ dations ◷ 2025-09-13 09:58:35 #计算机编程

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

相关

  • 生殖腺生殖腺是人和动物产生生殖细胞和分泌性激素的器官。低等动物又称“生殖巢”,即精巢和卵巢的总称;高等动物雄性的生殖腺是睾丸,雌性的生殖腺是卵巢。人类在青春期后睾丸产生精子
  • 青草禾草,俗称草,是单子叶植物。它们包括“真草”(禾本科,Gramineae)的植物家族成员,以及莎草(Cyperaceae)和灯芯草(Juncaceae)。“真草”,包括谷物、竹子和草坪的草(turf)。莎草包括许多野生
  • 世俗体科普特字母 麦罗埃文建筑 · 艺术 · 历法 科普特学 · 十字架 · 禁食 · 旗帜 · 历史 · 文学 · 音乐 · 修道主义埃及 · 美国 · 加拿大 · 非洲 · 亚洲 · 澳洲
  • 数字图像数字图像,是二维图像用有限数字数值像素的表示。通常,像素在计算机中保存为二维整数数组的光栅图像,这些值经常用压缩格式进行传输和储存。数字图像可以许多不同的输入设备和技
  • 圣武天皇圣武天皇(日语:聖武天皇/しょうむ てんのう Shōmu Tennō;701年-756年5月2日),日本第45代天皇(724年2月4日-749年7月2日)。原名首皇子(日语:首皇子/おびとのみこ Obito no miko)。元明
  • The New York Review of Books(2011)《纽约书评》(The New York Review of Books,缩写为NYRB)是一本在美国纽约市发行的半月刊(确切地说是每年二十期,学期段每月两期,寒暑假每月一期,显然是为了配合高校师生的生
  • 国家社会主义 (消歧义)国家社会主义可以指:
  • 普拉卡什·帕都恭普拉卡什·帕都恭(印地语:प्रकाश पादुकोण,英语:Prakash Padukone,1955年6月10日-),印度退役男子羽毛球运动员,第一届羽毛球世界杯男子单打冠军以及第一位获得全英羽毛球
  • 第七封印《第七封印》(瑞典语:Det sjunde inseglet)是一部由英格玛·伯格曼执导的1957年的瑞典存在主义电影,场景设定在黑死病爆发时期的瑞典,一位中世纪骑士穿越受瘟疫折磨地区的的旅程
  • 陈锡卿陈锡卿(1907年4月16日-1985年3月27日),字锟铻。出身南投竹山望族。台湾政治人物,中国国民党籍。为二战后首任官派及民选彰化县县长。前后共三届、任期九年。陈锡卿父亲陈元龙为公