默认LUA移植是直接使用的C库alloc函数,而这个是没法获取动态内存剩余的。所以简单修改获取下
[C] 纯文本查看 复制代码 #if 0
static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud; (void)osize; /* not used */
if (nsize == 0) {
free(ptr);
return NULL;
}
else
return realloc(ptr, nsize);
}
#else
static size_t mem_used = 0;
// 分配器实现
static void *l_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud;
size_t *realptr = NULL;
size_t oldsize = 0;
if (ptr) {
realptr = (size_t *)ptr - 1; // 回到头部
oldsize = *realptr;
}
if (nsize == 0) {
// 释放
if (ptr) {
mem_used -= oldsize;
free(realptr);
}
return NULL;
} else {
// 分配或重分配
size_t *newptr = realloc(ptr ? realptr : NULL, nsize + sizeof(size_t));
if (newptr) {
mem_used -= oldsize;
mem_used += nsize;
*newptr = nsize;
return (void *)(newptr + 1);
} else {
// realloc失败,mem_used不变
return NULL;
}
}
}
size_t get_mem_left(void) {
return mem_used;
}
#endif
|