我最近试图跟踪我们项目中lua的内存使用情况,并且遇到了使用lua_Alloc自定义分配器执行此任务的想法。好吧,分配器代码看起来很简单,而且看起来工作正常。
但是很快,这个小函数遇到了两个挑战:
1.它输出的结果与collectgarbage('count')给出的值完全不同;
2.假设当前的内存使用量为M个字节,然后我们输入一些nil引用并调用gc,则内存使用量将大于M个字节。例如:A返回,B返回,C返回,...,collectgarbage()
好吧,我听说如果您正确使用lua,就不会有内存泄漏,因此我认为在计算内存使用时我做错了什么。请帮我弄清楚。提前致谢。
随附的可编译代码如下:
extern "C"
{
#include "lua.h"
#include <lauxlib.h>
#include <lualib.h>
};
#include <cstdio>
#include <string>
#include <cstdlib>
using namespace std;
struct Tracker
{
size_t m_usage;
}g_tracker;
void*
Allocator(void* ud, void* ptr, size_t osize, size_t nsize)
{
Tracker* pTracker = (Tracker*)ud;
void* pRet = NULL;
if( nsize == 0 )
{
pTracker->m_usage -= osize;
//printf("Free %d bytes; ", osize);
free(ptr);
}
else
{
pTracker->m_usage -= osize;
//printf("first Free %d bytes; ", osize);
pTracker->m_usage += nsize;
//printf("then …Run Code Online (Sandbox Code Playgroud)