调用栈

✍ dations ◷ 2025-12-01 00:35: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)来获取程序的控制权。

相关

  • 迎宾馆坐标:35°40′48″N 139°43′43″E / 35.68000°N 139.72861°E / 35.68000; 139.72861迎宾馆赤坂离宫(日语:迎賓館赤坂離宮/げいひんかんあかさかりきゅう Geihinkan Akasaka
  • 正丙苯正丙苯(英语:n-propylbenzene)是一种烷基苯,为异丙苯的同分异构体。在化工生产中可做用作溶剂或有机合成中间体,也可用于纺织染料和印刷,作醋酸纤维溶剂。该物质可由由硫酸二乙酯
  • 漫画书漫画书(英语:Comic book),常简称为漫画,有时亦称为小人书、连环图或漫画杂志。是一种由若干单独画面所构成的叙事性美术杂志或独立发行的书刊,常伴随着对话(常出现在语音气球中,而“
  • 西普塔统治第二年后阿肯里·西特普恩里3ḫ-n-Rˁ-stp-n-Rˁ拉神的阿赫灵魂,拉神的选择之一统治第二年后麦伦普塔-西普塔Mrj-n-Ptḥ-s3-Ptḥ卜塔的挚爱,卜塔之子麦伦普塔二世·西普塔
  • 附属医疗及社会福利机构管理会卫生福利部附属医疗及社会福利机构管理会(简称医管会或医福会)是中华民国卫生福利部为整合部立医院之效能而成立的任务编组单位。医疗机构社会福利机构卫生福利部双和医院卫生
  • 南面挂屿南面挂屿是澎湖群岛岛屿之一,位在鸟屿北方,行政隶属澎湖县白沙乡。因形似富士山,又名“小富士山”、“澎湖富士山”。此岛无居民定居,但为观光景点之一。坐标:23°40′05.87″N 1
  • 人工颅骨变形人工颅骨变形(英语:Artificial cranial deformation)是人体改造(英语:Body modification)的一种,即通过外力等各种手段非自然地使人的颅骨变形。新生儿至婴儿期间,头骨尚未定型,略显
  • 蜜丽安·福格特 (自由画家)蜜丽安·福格特(德文:Miriam Vogt,1959年9月30日-)生于德国亚琛。是德国一位自由画家、现代艺术家、抽象画画家。2002年迁居瑞士,后投身艺术治疗及自由绘画教学工作。蜜丽安.福格
  • 叶室光亲叶室光亲(日语:葉室光親/はむろ みつちか ,1176年-1221年8月12日),又称藤原光亲(日语:藤原光親/ふじはら みつちか ),是日本平安时代末期至镰仓时代的公卿,父亲是权中纳言藤原光雅(日语:
  • 藤田信吉藤田信吉(1559年-1616年7月14日)是日本战国时代、安土桃山时代和江户时代初期的武将,山内上杉氏的家臣,父亲是藤田(小野)康邦(右卫门佐、泰邦)(另有异说)。下野西方藩的初代藩主。自从