调用栈

✍ dations ◷ 2025-11-05 22:44:30 #计算机编程

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

相关

  • 湖泊湖泊是内陆洼地中相对静止、有一定面积,不与海洋发生直接联系的水体。全世界共有约1.17亿个湖泊,共覆盖了地球近500万平方公里。从地球历史上来看,湖泊只是暂时性存在的水体,会
  • 大正大正(日语:大正/たいしょう Taishō */?)是日本大正天皇在位期间使用的年号,使用时间从1912年7月30日至1926年12月25日止。承续年号为明治,接续年号为昭和。 大正天皇体弱多病,这
  • 侯方域选自《清代学者像传》《壮悔堂文集》侯方域(1618年-1655年1月30日),字朝宗,号雪苑、杂庸子,河南商丘人,明末清初著名文人,与汪琬、魏禧合称“明末清初散文三大家”。与冒襄、陈贞慧
  • 妓生妓生是朝鲜半岛的传统艺妓,在古代为朝鲜国王、两班等提供歌舞表演。妓生作为一个社会阶层最早出现在高丽王朝时期,其社会地位在高丽王朝和朝鲜王朝时期属贱民。妓生都接受过相
  • 内阁府特命担当大臣(金融担当)内阁府特命担当大臣(金融担当),日本的国务大臣。是内阁府特命大臣的一个。内阁府特命担当大臣(金融担当)在日本内阁府的内阁府特命担当大臣的一个主要是管辖金融行政的国务大臣。
  • 海薇格·索菲亚 (瑞典)海薇格·索菲亚(丹麦语:,1681年6月26日-1708年12月22日),荷尔斯泰因-戈托普公爵夫人,瑞典国王卡尔十一世的长女。1698年,海薇格·索菲亚与荷尔斯泰因-戈托普公爵弗里德里希四世结婚,
  • 特拉万卡 (圣玛利亚-达费拉)特拉万卡(葡萄牙语:Travanca)是葡萄牙阿威罗区的一个堂区。总面积5.72平方公里,总人口2201人,人口密度384.8人/平方公里。
  • 彻曼·汶亚沙彻曼·汶亚沙(1982年9月5日-),小名叫贝(泰语:พลอย),真名为莱叻·汶亚沙(改名前是彻曼),是一名泰国女演员。她在曼谷的拉玛提布迪医院出生。2007年,彻曼出演,她在本电影表现得非常出色
  • 中原昌也中原昌也(なかはらまさや、1970年6月4日-)は、日本音乐家、电影评论家、小说家。1970年6月4日东京青山出生,1988年开始热爱音乐,曾是暴力温泉艺者(Violent Onsen Geisha)一员,后来组
  • 战略空军司令部战略空军司令部(Strategic Air Command,简写SAC),是在美国美北某一营区,搜集美国海陆空及军事卫星资讯,每天24小时汇整是否有外国武器侵犯美国与北盟国加拿大的国境资讯,并作出防卫