【发布时间】:2016-02-04 16:30:21
【问题描述】:
您能否解释一下 FFI.cast 在以下 sn-p 中的低性能?
教授 = 需要“个人资料” 本地 ffi = 要求(“ffi”) ffi.cdef[[ 结构消息{ int field_a; }; ]] 函数 cast_test1() 字节 = ffi.new("char[100000000]") 总和 = 0 t1 = 教授.rdtsc() 对于 i=1,1000000 做 总和 = 总和 + 我 结尾 t2 = 教授.rdtsc() 打印(“test1”,tonumber(t2-t1)) 结尾 函数 cast_test2() 字节 = ffi.new("char[100000000]") 总和 = 0 t1 = 教授.rdtsc() 对于 i=1,1000000 做 总和 = 总和 + 我 msg = ffi.cast("结构消息 *", bytes+ i * 16) -- msg.field_a = 我 结尾 t2 = 教授.rdtsc() 打印(“test2”,tonumber(t2-t1)) 结尾 cast_test1() cast_test2()看起来带有演员表的循环运行速度慢了大约 30 倍。任何想法如何克服这个问题?
% luajit -v cast_tests.lua LuaJIT 2.0.3 -- 版权所有 (C) 2005-2014 Mike Pall。 http://luajit.org/ 测试1 3227528 测试2 94474000【问题讨论】:
-
你试过比较 luajit -jv -jdump
吗?将不同方法的代码放入单独的文件中。第二个循环分配对象并涉及 GC ... -
是的,我看到了分配。但问题是如何摆脱它们并有效地使用演员表。
-
使用
local! Lua 没有自动作用域;此示例中的所有变量(ffi除外)都是全局变量。这会影响性能。
标签: performance casting ffi luajit