调用栈

✍ dations ◷ 2025-12-11 02:29:18 #计算机编程

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

相关

  • 下议院议长政治主题下议院议长(Speaker of the House of Commons)是英国国会下议院的议长。现任下议院议长为林赛·霍伊尔。与美国众议院议长不同,英国下议院议长需要脱离其党派,以中立身
  • 马尔科姆四世1153年5月27日马尔科姆四世 (中世纪盖尔语:Máel Coluim mac Eanric;现代盖尔语:Maol Chaluim mac Eanraig;1141年4月23日和5月24日之间 – 1165年12月9日)是苏格兰国王(1153年
  • 台湾高等法院高雄分院坐标:22°39′41″N 120°17′57″E / 22.661370°N 120.299085°E / 22.661370; 120.299085台湾高等法院高雄分院,是中华民国的二级法院之一,属于普通法院,行政组织上系台湾高
  • 蓝灯书屋兰登书屋(英语:Random House)是德国媒体集团贝塔斯曼旗下的一家出版社,总部设在美国纽约市。书屋于1927年成立,创始人是贝内特·瑟夫(Bennett Cerf)和唐纳德·克洛普弗(Donald Klopf
  • 铁氰酸盐铁氰酸盐是三价铁的氰配合物,化学式为3−,又称铁氰化物。最常见的铁氰酸盐是铁氰酸钾(铁氰化钾)。铁氰酸盐(3−)在光、热或稀酸的作用下可以得到深紫色的2-。其钾盐和浓盐酸反应,得
  • 三国遗事《三国遗事》是由高丽时代国师一然(1206年--1289年)所编撰,以新罗、高句丽、百济三国为记述对象的史书。该书由五卷、九篇、一百四十四个条目所构成,九篇的篇目分别为王历、纪异
  • 梯队系统2001年–2007年–与英国政府通信总部合作项目非持续进行项目梯队系统(Echelon)是一个以美国为中心的情报收集分析网络的俗称。参与国家是英美防卫协定的五个签署国,英国、美国
  • 保罗·柯艾略保罗·柯艾略(葡萄牙语:Paulo Coelho de Souza,发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Co
  • 爱探险的朵拉:消失的黄金城《爱探险的朵拉:消失的黄金城》(英语:)是一部2019年美国家庭冒险片,改编自尼可的儿童电视动画系列《爱探险的Dora》。由詹姆斯·波宾(英语:James Bobin)执导,尼可拉斯·史托勒与丹妮
  • 胡中藻胡中藻(1712年-1755年),字翰选,号坚磨生,吏役胡大祉之子。江西南昌府新建县人。乾隆四年十月的官员履历所载,胡中藻年二十九岁,即其最晚出生于康熙五十一年(1712年)。胡中藻为鄂尔泰