function func()
local value = math.abs(1)
return value
endfunction func1()
local value = func()
return value
endfunc1()
不使用尾呼叫的函式編譯後指令如下:
f:\>luac -l a.lua
main (7 instructions, 28 bytes at 003759e8)
0+ params, 2 slots, 0 upvalues, 0 locals, 2 constants, 2 functions
1 [4] closure 0 0 ; 00375b40
2 [1] setglobal 0 -1 ; func
3 [9] closure 0 1 ; 00375e20
4 [6] setglobal 0 -2 ; func1
5 [11] getglobal 0 -2 ; func1
6 [11] call 0 1 1
7 [11] return 0 1
function (6 instructions, 24 bytes at 00375b40)
0 params, 2 slots, 0 upvalues, 1 local, 3 constants, 0 functions
1 [2] getglobal 0 -1 ; math
2 [2] gettable 0 0 -2 ; "abs"
3 [2] loadk 1 -3 ; 1
4 [2] call 0 2 2
5 [3] return 0 2
6 [4] return 0 1
function (4 instructions, 16 bytes at 00375e20)
0 params, 2 slots, 0 upvalues, 1 local, 1 constant, 0 functions
1 [7] getglobal 0 -1 ; func
2 [7] call 0 1 2
3 [8] return 0 2
4 [9] return 0 1
使用尾呼叫以後,
function func()
return math.abs(1)
endfunction func1()
return func()
endfunc1()
編譯指令如下:
f:\>luac -l a.lua
main (7 instructions, 28 bytes at 003759e8)
0+ params, 2 slots, 0 upvalues, 0 locals, 2 constants, 2 functions
1 [3] closure 0 0 ; 00375b40
2 [1] setglobal 0 -1 ; func
3 [7] closure 0 1 ; 00375ec8
4 [5] setglobal 0 -2 ; func1
5 [9] getglobal 0 -2 ; func1
6 [9] call 0 1 1
7 [9] return 0 1
function (6 instructions, 24 bytes at 00375b40)
0 params, 2 slots, 0 upvalues, 0 locals, 3 constants, 0 functions
1 [2] getglobal 0 -1 ; math
2 [2] gettable 0 0 -2 ; "abs"
3 [2] loadk 1 -3 ; 1
4 [2] tailcall 0 2 0
5 [2] return 0 0
6 [3] return 0 1
function (4 instructions, 16 bytes at 00375ec8)
0 params, 2 slots, 0 upvalues, 0 locals, 1 constant, 0 functions
1 [6] getglobal 0 -1 ; func
2 [6] tailcall 0 1 0
3 [6] return 0 0
4 [7] return 0 1
尾呼叫可以有效減少棧的開消,減輕函式呼叫的層次。 優化程式效能
編寫高效程式需要兩個活動 第一,我們必須選擇一組最好的演算法和資料結構 第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行 的源 這裡,我們主要講述後者。首先,我們討論一下為什麼要編寫高效程式。不難想象,如果本來要用 天執行完的程式,經過優化只需要 天就可執行完,這是一件多麼令人振奮的 事啊。...
優化程式效能
l 消除迴圈的低效率 n 對於迴圈中的過程呼叫盡量移出迴圈外,例如 nfor i 0 i strlen s i strlen 函式為線性增長 在字串長度很大時 很消耗系統資源 n 減少不必要的儲存器引用,將儲存器引用儲存在臨時變數中.l 處理器優化 即充分利用儲存器流水線操作的吞吐量 n 迴圈展開,...
優化程式效能
研究彙編 是理解編譯器以及產生的 會如何執行的最有效的手段之一。編譯器優化 的限制 1 程式設計中存在 儲存器別名使用 的問題。編譯器必須假設不同的指標可能指向儲存器中相同的位置。2 函式呼叫 簡略了。具體看書 基本的編碼原則 效能大幅度提公升 優化程式效能的一些方法 1 將除錯完的程式完成編譯器級...