调用栈

✍ dations ◷ 2024-12-23 11:13:14 #计算机编程

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

相关

  • Cn5f14 6d10 7s22, 8, 18, 32, 32, 18, 2第一:1154.9 kJ·mol−1 第二:2170.0 kJ·mol−1 第三:3164.7 kJ·mol−1 (六方密排主条目:[[鎶的同位素]]'鎶'(Copernicium)是一种人工合成
  • 牛痘病毒牛痘(英语:cowpox)是发生在牛身上的一种传染病,它的症状通常是在母牛的乳房部位出现局部溃疡。牛痘由牛痘病毒引发,而该病毒是天花病毒的近亲。如果挤奶工的皮肤上有伤口,该病会透
  • 东征日本元日战争是元朝皇帝忽必烈与属国高丽在1274年和1281年两次派军侵略日本而引发的战争;这两次侵略在日本合称“元寇”或“蒙古襲来”,或依当时的日本年号称抵御元军第一次进攻的
  • 昌斗站昌斗站(韩语:창두역)是朝鲜民主主义人民共和国咸镜北道会宁市丰山里的一个铁路车站,属于咸北线。咸北线
  • 藤田咲藤田咲(1984年10月19日-)是日本的女性声优。所属事务所是ARTSVISION。本名藤田咲子。东京都出身。血型:A(自称AB)身高153cm。川村学园女子大学文学部历史系、日本播音演技研究所毕
  • 安妮·费舍尔安妮·费舍尔 (Annie Fischer,1914年7月5日-1995年4月10日)匈牙利古典音乐钢琴家。费舍尔出生于布达佩斯,就读于同城的弗朗茨·李斯特音乐学院,师从多赫南伊·埃尔诺。1933年她在
  • 煮雪的人煮雪的人(Zhuxue Deren,1991年-),台湾诗人,生于台北市。2011年1月创办《好烫诗刊》并担任主编。
  • 申仲忔申仲忔(越南语:Thân Trọng Ngật/.mw-parser-output .han-nom{font-family:"Nom Na Tong","Han-Nom Gothic","Han-Nom Ming","HAN NOM A","HAN NOM B","Ming-Lt-HKSCS-UNI-H"
  • 伪满吉林铁路局旧址伪满吉林铁路局旧址,位于中国吉林省吉林市昌邑区中康路5号,为一个省级文物保护单位,类型为近现代建筑,公布时间为2007年5月31日。该楼由日本人村上次野设计,为东洋式建筑风格。该
  • 环戊[c,d]戊搭烯环戊戊搭烯,也被称作裤衩烯,是一种三环反芳香性有机化合物,其分子式为C10H6,由三个五元环两两相并而成,中央的碳原子是三个环所共有的。环戊[c,d]戊搭烯含五个双键,其分子外围有四个