Lua函数的性能和优化

问题描述 投票:1回答:1

由于我们中间有一些编程向导,所以我想问你们答案,而不是试图猜测。

我一生中做了很多优化,并且在大多数情况下,这种优化水平是完全不必要的。

但是,我不确定为什么方法1(见下文)比方法2(见下文)快2到2.5倍。我本来希望如此,因为方法2的函数X包含函数Y,所以它的速度至少要比方法1快,因为方法1中的两个函数是分开的。

方法1背后的速度明显快于方法2的原因是什么?是一些编译器优化吗?

-- METHOD 1: 

local function Y()
    return true
end

local function X()
    Y()
    return true
end

local getTimer = system.getTimer
local startTime = getTimer()
local iterations = 1000000

for i = 1, iterations do
    X()
end

print( "TIME:"..(getTimer()-startTime) )

-- METHOD 2:

local function X()

    local function Y()
        return true
    end

    Y()

    return true
end

local getTimer = system.getTimer
local startTime = getTimer()
local iterations = 1000000

for i = 1, iterations do
    X()
end

print( "TIME:"..(getTimer()-startTime) )
lua
1个回答
0
投票

函数是Lua中的实际对象。您要从原型中实例化此类对象,并将其放入名为Y的变量中。这样做有一些代价:分配,挂接调试信息,关闭所有升值等等。有关某些相关位,请参见here

在#2中,您每次都会执行此操作。另外,在X的末尾,Y超出范围,而没有其他任何引用,因此成为垃圾,在某个时候有助于收集。

© www.soinside.com 2019 - 2024. All rights reserved.