2026-04-01 15:16:23 +08:00

102 lines
2.3 KiB
C

/**
* 日期: 2026-03-31
* 作者: coffee
* 描述: 基于 HTlsf 的引用计数内存管理模块
* 单例模式,只需初始化一次
* 支持引用计数、自动释放、外部内存拷贝转换
*/
#ifndef _H_MEM_H_
#define _H_MEM_H_
#include <stdint.h>
#include <stddef.h>
/**
* @brief 初始化内存管理器(单例模式,只需调用一次)
* @param buffer 外部缓冲区
* @param size 缓冲区大小
* @return 成功返回1, 失败返回0
*/
uint8_t HMemInit(void *buffer, size_t size);
/**
* @brief 判断是否已初始化
*/
uint8_t HMemIsReady(void);
/**
* @brief 分配内存
* @param size 请求大小
* @return 成功返回内存指针, 失败返回NULL
*/
void *HMemMalloc(size_t size);
/**
* @brief 分配并清零内存
* @param num 元素数量
* @param size 每个元素大小
* @return 成功返回内存指针, 失败返回NULL
*/
void *HMemCalloc(size_t num, size_t size);
/**
* @brief 重新分配内存
* @param ptr 原内存指针
* @param size 新大小
* @return 成功返回内存指针, 失败返回NULL (原内存保持不变)
*/
void *HMemRealloc(void *ptr, size_t size);
/**
* @brief 释放内存 (引用计数为0时才真正释放)
* @param ptr 内存指针
* @return 成功返回1, 失败返回0
*/
uint8_t HMemFree(void *ptr);
/**
* @brief 增加引用计数或拷贝外部内存
* @param ptr 内存指针 (可以是外部内存)
* @param size 如果是外部内存,指定要拷贝的大小;如果是 HMem 内存,此参数被忽略
* @return
* - 如果是 HMem 分配的内存, 返回 ptr (引用计数+1)
* - 如果是外部内存, 返回新分配的内存指针 (内容已拷贝)
* - 内存不足返回 NULL
*/
void *HMemAddRef(void *ptr, size_t size);
/**
* @brief 获取当前引用计数
* @param ptr 内存指针
* @return 引用计数, 如果不是 HMem 分配的返回 0
*/
uint32_t HMemGetRefCount(void *ptr);
/**
* @brief 判断指针是否由 HMem 分配
* @param ptr 内存指针
* @return 是返回1, 否返回0
*/
uint8_t HMemIsManaged(void *ptr);
/**
* @brief 获取可用内存大小
*/
size_t HMemGetFreeSize(void);
/**
* @brief 获取已使用内存大小
*/
size_t HMemGetUsedSize(void);
/**
* @brief 获取总容量
*/
size_t HMemGetCapacity(void);
#endif // _H_MEM_H_