小编zae*_*age的帖子

使用自定义Lua分配器计算内存使用量,但其结果与collectgarbage('count')不同

我最近试图跟踪我们项目中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)

memory lua garbage-collection allocator

3
推荐指数
1
解决办法
1994
查看次数

标签 统计

allocator ×1

garbage-collection ×1

lua ×1

memory ×1