调用栈

✍ dations ◷ 2025-09-15 23:46:23 #计算机编程

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

相关

  • 中国效仿西方发展工业的过程进行的并不顺畅中国的现代工业肇始于1860年代的洋务运动,历经一百年多年发展,是推动中国成为现代化国家的主动力。19世纪中期之前,中国是传统的封建农业国家,中国经济体系是以家庭为单位进行生
  • 黄土汤黄土汤,出自《伤寒杂病论》。
  • 气泵里的鸟实验《气泵里的鸟实验》(英语:An Experiment on a Bird in the Air Pump)是于1768年德比的约瑟夫·赖特(英语:Joseph Wright of Derby)的布面油画作品,也是赖特于18世纪60年代的蜡烛场
  • 希瓦汗国希瓦汗国(波斯语:خانات خیوه‎;乌兹别克语:خیوه خانلیگ), 为16世纪至1920年存在于中亚地区的封建国家。由于其领土位于古代花剌子模王朝的疆域内,因此也称花剌
  • 国立自然历史博物馆美国国立自然历史博物馆(National Museum of Natural History)是一家位于美国华盛顿哥伦比亚特区的博物馆,由国立博物馆机构史密森尼学会管理,于1910年启用。2009年时上映的美国
  • 全富岛全富岛,越方称之为�花岛(越南语:Đảo Ốc Hoa/.mw-parser-output .han-nom{font-family:"Nom Na Tong","Han-Nom Gothic","Han-Nom Ming","HAN NOM A","HAN NOM B","Ming-Lt-HKS
  • 360搜索360搜索(英语:360 Search,原好搜、360综合搜索),是北京奇虎科技有限公司开发的一款搜索引擎,主打“安全、精准、可信赖”。360搜索于2012年8月16日上线, 9月启用独立域名so.com。“
  • 苏菲亚·波提拉苏菲亚·波提拉(英语:Sofia Boutella,1982年4月3日-)是一位阿尔及利亚女舞者、模特儿与演员。擅长嘻哈和街头舞蹈,较著名的是在Nike广告活动中参演。波提拉也参与过电影的演出,如《
  • 醛糖酸醛糖酸(aldonic acid)为一种糖酸。为醛糖的醛基被氧化为羧基而成。因此,此类化合物的通式为HOOC-(CHOH)n-CH2OH。若氧化为为羧基的是醛基另一端的羟基,则称为糖醛酸(uronic acid),
  • 迹见学园女子大学迹见学园女子大学(日语:跡見学園女子大学/あとみがくえんじょしだいがく;英语:Atomi University)是一所位于日本东京都的私立大学,1965年设立。文学部管理学部观光群体学部心理学部