lmem.c 里面也是定义了三个函数:
void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, int limit, const char *what)
l_noret luaM_toobig (lua_State *L)
void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize)
luaM_realloc_(lmem.c#74)
luaM_realloc_
方法是一个通用的方法,在 lmem.h 里面定义了很多宏,都是依赖这个方法。这个方法需要依赖 global_State *g
里的 frealloc
,在 Lua 启动的时候,会用 l_alloc
这个来赋值 frealloc。
留意到 HARDMEMTESTS
这个地方,我在 IRC 上问过,似乎是为了在每次分配内存的时候做一次 GC,帮助跟踪 GC 的 bug。
luaM_growaux_(lmem.c#48)
这个函数应该主要是为了增长 vector 的空间的。
luaM_toobig(lmem.c#68)
这个函数很明显是为了报错。
lmem.h
lmem.h 定义了一些宏,方便给外界调用。