硬汉嵌入式论坛

 找回密码
 立即注册
查看: 209|回复: 0
收起左侧

[Lua] 在不重定向LUA底层alloc函数的情况下,简单修改获取动态内存剩余

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
发表于 2025-10-31 11:12:11 | 显示全部楼层 |阅读模式



默认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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-21 23:47 , Processed in 0.035316 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表