调用栈

✍ dations ◷ 2025-11-18 10:16:46 #计算机编程

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

相关

  • 南洋群岛南洋群岛(なんようぐんとう)是西太平洋赤道附近的密克罗尼西亚群岛之内,国际联盟赋予日本的委任统治地,包括现在的北马里亚纳群岛、帕劳、马绍尔群岛、密克罗尼西亚联邦。也称为
  • 伊立替康伊立替康(Irinotecan),商品名开普拓(Campto),是一种拓扑异构酶I抑制物,主要用来治疗结直肠癌及小细胞癌,也可以在最初的疗程失败后,与5-氟尿嘧啶及亚叶酸治疗胰腺癌。通常会与其他化
  • 阿拉伯的劳伦斯《阿拉伯的劳伦斯》(英语:Lawrence of Arabia),1962年电影,英国导演大卫·利恩执导,并获得多项奥斯卡金像奖。影片松散地依据托马斯·爱德华·劳伦斯的自传《智慧的七柱》改编,彼得
  • 松巴哇岛松巴哇岛(印尼语:Pulau Sumbawa)是印度尼西亚的一个岛。经纬度为:南8°47,东118°5′,她属于西努沙登加拉省(West Nusa Tenggara),全岛面积15,448平方公里,人口一百五十万。这个岛处在
  • 莱昂内尔·巴里莫尔1954年11月15日(1954-11-15)(76岁)美国加利福尼亚州洛杉矶Van Nuys赖尼尔·巴利摩(英语:Lionel Barrymore,1878年4月28日-1954年11月15日),美国演员,曾获得奥斯卡最佳男主角奖。赖尼尔
  • 金午时花金午时花(学名为Sida rhombifolia ssp. rhombifolia)。多年生直立半灌木;茎被星状毛。叶菱形或长椭圆状披针形,叶基圆形、钝或尖锐,两面被短星状毛。花瓣5枚,黄色至米黄色,花径可达
  • 列夫·尼古拉耶维奇·扎伊科夫列夫·尼古拉耶维奇·扎伊科夫(俄语:Лев Никола́евич Зайко́в,1923年4月3日-2002年1月7日)是苏共党和国家领导人,苏共莫斯科市委第一书记。1923年,生于图拉市
  • 多元酸多元酸,通常指在一个分子中可能放出多个质子(H+)的酸。如无机酸中的硫酸(H2SO4)、磷酸(H3PO4)等。在有机化合物中主要指每一个分子含多个羧基的羧酸,如草酸(HOOCCOOH)、苹果酸(HOOCCH2C
  • 珠江区珠江区,是中华人民共和国广东省广州市一个已取消的区,1950年广州市16个区之一,后被撤销。珠江区曾是当时中华人民共和国最大的一个水上行政区,1949年10月广州战役结束后,解放军代
  • 清太宗元妃清太宗元妃(1593年-1612年),索和济巴颜系钮祜禄氏,满洲镶黄旗人。额亦都之女,清太宗皇太极的福晋,后世文献称为清太宗元妃、元妃,视她为皇太极元配,并非当朝称谓。根据《开国佐运功臣