内存池#

基本信息#

  • 起草日期: 2019-11-25

  • 设计人员: wendal

为什么需要内存池#

  • 一段连续的区域分配给用户使用, 独立于系统的heap

  • 这个内存区间的大小介于 64k ~ 100k

  • Lua虚拟机及相关全局变量应该使用该区域

设计思路和边界#

  • 使用freertos的heap_4作为原型

  • 额外提供一个用Lua虚拟机的alloc方法

  • 提供API查询剩余内存

  • API应该只涉及内存申请与释放,不做其他事情.

C API#

定义内存池总大小#

#define LUAT_MALLOC_HEAP_SIZE ((size_t) 85 * 1024)

#

// 初始化内存
void  luat_heap_init(void);
// 申请内存
void* luat_heap_malloc(size_t len); // 如果失败,返回NULL
// 释放内存
void  luat_heap_free(void* ptr);
// 缩放内存块
void* luat_heap_realloc(void* ptr, size_t len);
// 申请内存并填充0
void* luat_heap_calloc(size_t len);
// 获取剩余内存
size_t luat_heap_getfree(void);
// Lua所需要的alloc方法
void* luat_heap_alloc(void *ud, void *ptr, size_t osize, size_t nsize);

Lua API#

-- 获取总内存数量
mem.total_count()
-- 获取剩余内存数量
mem.free_count()

相关知识点#

  • Luat核心机制