在代码比较少的情况下,一些边界操作的耗时就尤为重要了,比如说function() end这种函数调用,在虚拟机层面要走lua_Dcall,要多走快50行的C代码,如果函数内部本身复杂度较高,那这些微乎其微,但是如果函数本身复杂度较低,并且多次调用,可能就会有影响。
操作 | 耗时(1e6循环, seconds) | 相当于几个基础操作 |
C语言 一条指令 | 0.001 | 1/6 |
Lua 空循环 | 0.007 | 1 |
标准指令 | 0.006 | 1 |
空CAPI调用 | 0.048 | 8 |
空lua函数调用 | 0.042 | 7 |
空元表index调用 | 0.117 | 19.5 |
创建空表 | 0.32 | 5 |
创建哈希容量1并初始化 | 0.616 | 103 |
创建哈希容量3并初始化 | 0.7 | 112 |
lua函数中创建哈希容量3并初始化 | 0.743 | 124 |
C中创建含有三个int的udata并设置结构为vector | 0.393 | 66 |
修改已有容量的表的值 | 0.079 | 12 |
读表 | 0.019 | 3 |
C函数创建size1 udata | 0.273 | 90 |
C函数创建size10 udata | 0.278 | 90 |
C函数创建size10000 udata | 1.852 | 600 |
创建哈希容量4并初始化 | 0.724 | 120 |
创建哈希容量8并初始化 | 0.985 | 164 |
创建哈希容量16并初始化 | 1.42 | 237 |
创建哈希容量32并初始化 | 2.005 | 334 |