我有以下qsort
示例來嘗試luajit中的回調。但是它有一個內存泄漏(執行時爲luajit: not enough memory
),這對我來說並不明顯。luajit qsort回調示例內存泄漏
有人可以給我一些關於如何創建一個適當的回調示例的提示嗎?
local ffi = require("ffi")
-- ===============================================================================
ffi.cdef[[
void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *));
]]
function compare(a, b)
return a[0] - b[0]
end
-- ===============================================================================
-- Explicitly convert to a callback via cast
local callback = ffi.cast("int (*)(const char *, const char *)", compare)
local data = "efghabcd"
local size = 8
local loopSize = 1000 * 1000 * 100.
local bytes = ffi.new("char[15]")
-- ===============================================================================
for i=1,loopSize do
ffi.copy(bytes, data, size)
ffi.C.qsort(bytes, size, 1, callback)
end
平臺:OSX 10.8 luajit:2.0.1
更新的描述更加具體,並固定在代碼中的錯誤的變量名稱。 – camillobruni
你可以通過在循環中放置一個'collectgarbage()'調用來解決它 – finnw
爲其他人添加信息 - Mike只是修復了這個問題 - http://www.freelists.org/post/luajit/Beginners-FFI-callback-內存泄漏,2 – malkia