内存池 (Memory Pool)是一种内存分配方式,是为了减少频繁使用 malloc/free new/delete 等系统调用而造成的性能损耗而设计的,具有效率高、内存碎片少和防止内存泄漏等特性。内存池根据实际需要,在初始状态获取一大块内存(堆区或者静态内存),然后划分成若干内存页,进行管理,将内存页中的块传递给申请者使用。SDK中采用TLSF内存分配器管理,专门设计用于满足实时要求。
TLSF (Two-Level Segregated Fit memory allocator), 是一款通用的动态内存分配器,具有以下特点,
TLSF主要采用两级位图(Two-Level Bitmap)与分级空闲块链表(Segregated Free List)的数据结构管理动态内存池(memory pool)以及其中的空闲块(free blocks),用Good-Fit的策略进行分配。
TLSF算法分配速度不一定快,只是说能保证分配的时间是个常数(malloc不能保证)。
TLSF也叫多内存堆管理算法,支持动态增加或者删除多块不连续的内存,将它们作为一个内存堆使用。
FMemory Pool主要完成内存池的初始化,为用户提供多种内存申请方法,支持内存池的使用情况监测,
相关源文件为:
fmempory_pool
├── fmempory_pool.c
└── fmempory_pool.h
tlsf
├── tlsf.c
└── tlsf.h
以下部分将指导您完成 FMemory Pool 的软件配置:
typedef struct
{
pool_t pool_addr;
FSListNode list;
} FMempPoolList; /* 内存池控制数据 */
typedef struct
{
FMempPoolList *pools_list; /* 内存池链表 */
tlsf_t tlsf_ptr; /* tlsf内存池 */
u32 is_ready; /* 内存池初始化完成标志 */
} FMemp; /* 内存池控制数据 */
模块错误码编号 0x0010000
[0x0] FMEMP_SUCCESS : success
[0x0010000] FMEMP_ERR_INVALID_BUF : 输入的内存池缓存区不合法
[0x0010001] FMEMP_ERR_INIT_TLFS : 初始化TLFS内存池失败
[0x0010002] FMEMP_ERR_BAD_MALLOC : 从TLFS内存池分配空间失败
FError FMempInit(FMemp *memp, void *begin_addr, void *end_addr);
Note:
Input:
Return:
void FMempRemove(FMemp *memp);
Note:
Input:
Return:
void *FMempMalloc(FMemp *memp, fsize_t nbytes);
Note:
Input:
Return:
void *FMempCalloc(FMemp *memp, fsize_t count, fsize_t size)
Note:
Input:
Return:
void *FMempMallocAlign(FMemp *memp, fsize_t size, fsize_t align);
Note:
Input:
Return:
void *FMempRealloc(FMemp *memp, void *ptr, fsize_t nbytes);
Note:
Input:
Return:
void FMempFree(FMemp *memp, void *ptr);
Note:
Input:
Return:
void FMemProbe(FMemp *memp, u32 *total, u32 *used, u32 *max_used);
Note:
Input:
Return:
void FMemListAll(FMemp *memp);
Note:
Input:
Return:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。