Вся память проходит через одну функцию lua_Alloc.Это принимает форму:
typedef void* (*lua_Alloc) (void* ud, void* ptr, size_t oszie, size_t nsize);
Все распределения, перераспределения и освобождения проходят через это.Документация для этого может быть найдена в этой веб-странице .Вы можете легко написать свой собственный, чтобы отслеживать все операции с памятью.Например,
void* MyAlloc (void* ud, void* ptr, size_t osize, size_t nsize)
{
(void)ud; (void)osize; // Not used
if (nsize == 0)
{
free(ptr)
TrackSubtract(osize);
return NULL;
}
else
{
void* p = realloc(ptr,nsize);
TrackSubtract(osize);
if (p) TrackAdd(nsize);
return p;
}
}
Вы можете написать функции TrackAdd () и TrackSubtract () для чего угодно: вывод в журнал;настроить счетчик и т. д.
Чтобы использовать новую функцию, вы передаете указатель на нее при создании состояния Lua:
lua_State* L = lua_newstate(&MyAlloc,0);
Документация для lua_newstate находится здесь .
Удачи.