我知道LUA中沒有前處理器,所以沒有像#define之類的東西。但我想有“除錯”選項。例如,我想要一個可選的控制臺除錯,例如:
if do_debug then
function msg(s)
print(s)
end
else
function msg(s)
end
end
msg(string.format(".............",v1,v2,......))
它可以作業,但我想知道“無除錯”模式下的 CPU 成本是多少。事實是,我用大字串呼叫了很多這些 msg() 函式,有時使用大量變數構建和格式化。所以我想避免額外的作業。但我認為LUA不夠聰明,無法看到我的函式是空的,并且沒有必要構建它的引數......
那么在 LUA 中是否有避免這些額外成本的轉變?
注意:您可能會說 CPU 成本可以忽略不計,但我將其用于實時音頻處理,在這種情況下 CPU 確實很重要。
uj5u.com熱心網友回復:
您無法避免為msg函式創建和展開堆疊幀。但是,至少在顯示的代碼段中,您可以改進的是將string.format呼叫移至msg:
if do_debug then
function msg(...)
print(string.format(...))
end
else
function msg() end
end
msg(".............",v1,v2,......)
另一種方法,用可讀性換取性能,是總是if do_debug在你想要列印除錯訊息的地方做正確的事。條件檢查比函式呼叫快得多。
但是,我所知道的真正避免函式呼叫的唯一方法是編譯您自己版本的 Lua 解釋器,并在決議器中添加一個(至少是基本的)前處理器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/522980.html
標籤:调试lua
