-
調用棧
鎖定
- 中文名
- 調用棧
- 外文名
- Call stack
- 目 的
- 存放子程序的返回地址
- 領 域
- 計算機
調用棧簡介
調用棧最經常被用於存放子程序的返回地址。在調用任何子程序時,主程序都必須暫存子程序運行完畢後應該返回到的地址。因此,如果被調用的子程序還要調用其他的子程序,其自身的返回地址就必須存入調用棧,在其自身運行完畢後再行取回。在遞歸程序中,每一層次遞歸都必須在調用棧上增加一條地址,因此如果程序出現無限遞歸(或僅僅是過多的遞歸層次),調用棧就會產生棧溢出。
[1]
調用棧功能
調用棧的主要功能是存放返回地址。除此之外,調用棧還用於存放:
- 本地變量:子程序的變量可以存入調用棧,這樣可以達到不同子程序間變量分離開的作用。
調用棧彙編語言
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再從棧中取回其自身的返回地址。
[2]
調用棧安全性
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:0次歷史版本
- 最近更新: 是家林吖