lua不同写法速度差别很大

来源:互联网 发布:windows盗版的危害 编辑:程序博客网 时间:2024/05/01 03:35

 

前些天无意中在网上看到一篇文章,写的是几种脚本语言以及c的速度比较,大意是测试下来lua的速度很慢,只相当于c1/60左右,看了一下测试函数,如下(命名版本1):

 

tkstart = os.clock()

 

local count = 10000000

local accumv = 34.5;

local function iterate (times,accumv)

    if 0 == times then

        return accumv

    else

        return iterate (times - 1, accumv + 2)

    end

end

print(iterate(count,accumv))

 

print(os.clock() - tkstart)

 

这是个迭代调用,理论上这种调用速度不快,所以改写了一下,命名版本2

 

tkstart = os.clock()

 

local i=0.0;

local function process (ret)

 while(i < 10000000.0) do

  i = i+1.0

  ret = ret + 2.0

 end

 return ret

 

end

 

process(34.5)

print(os.clock() - tkstart)

 

再改写了一下,版本3,如下:

 

tkstart = os.clock()

 

local i=0.0;

local function process (ret)

 local t = ret

 while(i < 10000000.0) do

  i = i+1.0

  t = t + 2.0

 end

 return ret

 

end

 

process(34.5)

print(os.clock() - tkstart)

 

for循环再改写了一个版本,版本4,如下:

 

tkstart = os.clock()

 

local count = 10000000

local accumv = 34.5;

local function calc (times,accumv)

        local result = accumv

        for i=1,times do

                result = result + 2.0

        end

        return result

end

print(calc(count,accumv))

 

print(os.clock() - tkstart)

 

简单测试耗时如下

版本1  0.945

版本2  0.484

版本3  0.475

版本4  0.138   编译成.out跟直接执行.lua耗时差不多,没明显变化。

虽然是一个功能很简单实现也很简单的lua函数,但速度差别很大,由此可见不同写法对执行效率影响很大,跟版本4差不多的c程序执行耗时大约为0.016, lua大致相当于c1/8 - 1/9速度,而不是那篇文章的作者认为的只相当于c1/60

 

从上面四个不同代码大致可以看出以下问题:

1、  迭代算法是很慢的(版本1)。

2、  While的效率比for慢很多(版本234的比较)。

3、  临时变量比参数效率高(版本23)。

 

原创粉丝点击