Retour à la leçonMission
Mission : le serveur de simulation qui fuit sa mémoire
Diagnostiquer une fuite mémoire causée par des ressources C non attachées au garbage collector Lua, et sécuriser un cast FFI dangereux.
Contexte
Un moteur de simulation physique utilise LuaJIT et sa FFI pour allouer des buffers de calcul :
lua
local ffi = require("ffi")
ffi.cdef[[
void *malloc(size_t size);
void free(void *ptr);
]]
local function allocateBuffer(size)
local ptr = ffi.C.malloc(size) -- allocation manuelle, jamais libérée explicitement
return ptr
end
for i = 1, 10000 do
local buf = allocateBuffer(1024) -- appelé à chaque frame de simulation
endAprès quelques minutes de simulation continue, le processus consomme des gigaoctets de mémoire et finit par planter, alors que collectgarbage("count") ne montre presque aucune mémoire Lua utilisée.