【发布时间】:2020-07-03 09:49:51
【问题描述】:
不久前,我在 Lua 中编写了分形程序。它在我的旧 Windows 7 和 Windows 8 PC 上运行良好。 我买了一台装有 Windows 10 的新笔记本电脑,并使用 luajit 2.1.0 运行它,这在过去对我来说效果最好。不幸的是,一些具有各种参数的运行失败,没有错误或原因。然后我注意到即使成功执行也会使用太多内存。我尽力使用从 2.0 到 2.1 的各种 luajit 构建来追踪问题,但我唯一能看到的是内存泄漏以某种方式与对 OpenCl api 的 FFI 调用有关。 如果有人愿意看,我会提供完整的程序代码和所需的api dll。 附上旧的演示 lua 代码,它也在 win10 上泄漏,基于和使用:https://github.com/malkia/luajit-opencl
cl-demo.lua : https://github.com/LuaJIT/LuaJIT/files/4366334/cl-demo.txt
我确定我的帖子措辞不正确,英语不是我的母语,而且可能位置不正确。我并不是说有人浪费时间调试我拼凑的旧代码,但也许可以为我指明正确的方向,或者建议一些易于使用的内存错误检查工具,例如 purify。我曾经用它来查找内存错误,不幸的是它不再适用于单个用户。 此外,我现在强烈怀疑在调用 opencl 后某些东西正在覆盖内存。因此,调用 os.time、math.random 等会导致代码无法解释的执行停止。 调用 OpenCL 后的以下代码开始表现得很奇怪,if 语句中最后一个循环中的 ii 值突然变成了 0.13900852449513657 之类的值!
clfns[1]=true;
for ii=2,34,1 do clfns[ii]=false; end
for ii=2,34,1 do if string.find(formula, c2fns[ii] .. "[(]") then
for jj=1,4,1 do if cdfns[ii][jj] then clfns[cdfns[ii][jj]]=true; end end
end end
for ii=1,34,1 do
if clfns[ii] then
cFuns = cFuns .. cfns[ii]; end end
【问题讨论】: