调用栈

✍ dations ◷ 2025-06-09 00:04:28 #计算机编程

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

相关

  • 图瓦卢面积以下资讯是以2018年估计国家领袖国内生产总值(购买力平价) 以下资讯是以2016年估计国内生产总值(国际汇率) 以下资讯是以2016年估计立国历史图瓦卢(英语:Tuvalu)是一个由九个环
  • 孙承恩孙承恩(1619年-1659年),原名曙,字扶桑。江南常熟(今江苏张家港市凤凰镇恬庄)人。清朝状元。祖父孙森(兰畹),官至高州府同知。伯父孙朝肃(恭甫),明万历四十四年(1616年)进士。孙承恩生于万历
  • 德国居民在第二次世界大战的后期及战争结束时候,数百万德意志公民(不论民族或是否与纳粹德国有联系)以及德意志裔人(不论国籍)被迫从其他欧洲国家迁徙回德国。受到影响的范围包括前德意志
  • 警察总局警察总局(葡萄牙语:Serviços de Polícia Unitários,缩写为SPU),是中华人民共和国澳门特别行政区政府保安司辖下的部门。澳门特别行政区政府于2001年正式在治安警察局及司法警
  • 张砚卿张砚卿(1990年7月5日-),台湾新闻主播,毕业于国立政治大学,现为三立新闻台主播。2013年参加三立新闻台超级主播比赛,获选为培训主播。2015年加入壹电视新闻台担任政治财经线记者、整
  • 黑人权力黑人权力是一个政治标语以及协助非洲后裔达到自决的各种相关意识形态的名称。过往被美国的非裔美国人所使用。其主要在1960年代晚期以及1970年代早期,强调种族的骄傲以及黑色
  • 左翼国际组织列表已消亡 已放弃共产主义意识形态 已消亡 已放弃共产主义意识形态 已消亡 已放弃共产主义意识形态 已消亡 已消亡 已放弃共产主义意识形态 这是一个左翼国际组织(包括社
  • 2007年中国反卫星导弹试验2007年中国反卫星导弹试验是指中国于2007年1月11日进行的一次反卫星导弹试验。在该试验中,由西昌卫星发射中心 (28°14′49″N 102°01′30″E / 28.247°N 102.025°E / 28.
  • 日本晚樱日本晚樱(学名: var. )为蔷薇科樱属下的一个变种。该变种叶边有渐尖重锯齿,齿端有长芒。日本晚樱常有香气。花期3-5月。中国大陆各地庭园有所栽培,引自日本,用以观赏。
  • 爱的空间 (韩国电影)《爱的空间》(朝鲜语:동감/同感 ,英语:)是一部于2000年出品的韩国电影,由金正权(朝鲜语:김정권 (영화 감독))执导,金荷娜及刘智泰主演,电影讲述时空分隔了两个年头的男女主人翁,透过一部