调用栈

✍ dations ◷ 2025-11-19 11:53:36 #计算机编程

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

相关

  • 2B类致癌物2B类致癌物(英语:Group 2B carcinogens),为国际癌症研究机构(International Agency for Research on Cancer,IARC)对致癌物质的分类,此类物质(或其混合物)可能对人类致癌。现有236类物
  • 查德·米尔金查德·亚历山大·米尔金(英语:Chad Alexander Mirkin,1963年11月23日-),美国化学家,西北大学教授。1986年毕业于狄金森学院(理学士),1989年取得宾夕法尼亚州立大学的博士学位。
  • 约翰·额巴迪·韦斯特伍德约翰·额巴迪·韦斯特伍德(英语:John Obadiah Westwood,1805年12月22日-1893年1月2日),英格兰昆虫学家、考古学家,出生于英国谢菲尔德,于牛津过世。部分列举
  • 玛丽娅·卡钦斯卡玛丽亚·卡钦斯卡(波兰语:Maria Helena Kaczyńska,1942年8月21日-2010年4月10日),波兰总统莱赫·卡钦斯基夫人,2005年至2010年间为波兰第一夫人。她还精通英语、法语、西班牙语和
  • 漫画威龙《漫画威龙》(英文:Fist of Fury 1991 II)是电影《新精武门1991》的续集,又名《新精武门1992》,导演为左颂昇,由周星驰、张敏、锺镇涛、萧芳芳、陈百祥以及元华等人主演。牛皮(陈百
  • 加拿大进步保守党加拿大进步保守党(英语:Progressive Conservative Party of Canada;法语:Parti progressiste-conservateur du Canada;简称PC)是一个存在于1942年至2003年的加拿大联邦政党,该党在
  • 山茶花山茶(学名:Camellia japonica),又名山茶花,山茶属植物,属常绿灌木和小乔木。古名海石榴。有玉茗花、耐冬等别名,日语称作椿,在韩语中也被叫做冬柏花,在韩国海云台区冬柏岛就是以茶花
  • 中国人民政治协商会议全国委员会副主席中国人民政治协商会议全国委员会副主席(简称政协全国委员会副主席或全国政协副主席)是中国人民政治协商会议全国委员会的副职领导人,属国家级副职领导人。《中国人民政治协商会
  • 整合分类学资讯系统整合分类学资讯系统(英语:Integrated Taxonomic Information System,缩写作 ITIS)是一个专门提供生物物种分类讯息的机构。前身是设立于1996年的一个团体,属于美国联邦政府商务部
  • 北德广播易北爱乐乐团北德广播易北爱乐乐团(德语:NDR Elbphilharmonie Orchester),位于德国汉堡,为德国最具盛名的顶尖管弦乐团之一。该乐团成立于1945年,2016年以前的旧名称为北德广播交响乐团(德语:NDR