luajit에서 콜백을 시도하려면 다음과 같은 qsort
예제가 있습니다. 그러나 그것은 나에게 명백하지 않은 메모리 누수 (실행시 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
더 구체적으로 설명을 업데이트하고 코드에 잘못된 var에 이름을 고정. – camillobruni
당신은'collectgarbage()'콜을 루프 – finnw
에 넣어 다른 사람들을위한 정보를 추가 할 수 있습니다 - 마이크가 방금 고쳤습니다 - http://www.freelists.org/post/luajit/Beginners-FFI-callback- memory-leak, 2 – malkia