Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

The biggest feature of a memory pool is its support for shard release.

License

Notifications You must be signed in to change notification settings

lenky0401/memory_pool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

35 Commits

Repository files navigation

项目介绍

准备实现一个内存池,最大的特点是支持分片释放。

何谓分片释放,比如一次申请了100字节,第一次释放时可以先只释放前50字节,此时app可以继续使用未释放的剩余50字节,等到最后,app可以再次调用释放接口释放剩余的50字节。

API接口

#define FREE_RET_Ok 0
#define FREE_RET_Not_In_Memory_Pool 1
#define FREE_RET_Bad_Parameter 2
#define FREE_RET_Bad_Slice_Info 3
/**
 * @brief 创建内存池
 * @param size 内存池大小,单位为字节
 * @param thread_safe 是否线程安全
 * @return 内存池指针
 */
memory_pool* memory_pool_create(uint32_t size, int32_t need_thread_safe);
/**
 * @brief 销毁内存池
 * @param pool 内存池指针
 * @return void
 */
void memory_pool_destroy(memory_pool *pool);
/**
 * @brief 内存申请
 * @param pool 内存池指针
 * @param size 申请内存大小,单位为字节
 * @return 申请的内存指针,申请失败返回NULL
 */
void* memory_pool_malloc(memory_pool *pool, uint32_t size);
/**
 * @brief 内存释放
 * @param pool 内存池指针
 * @param ptr 待释放的内存指针
 * @return 见:FREE_RET_*
 */
int memory_pool_free(memory_pool *pool, void *ptr);
//一次最多释放8块分片内存
#define SLICE_INFO_NUM_MAX (8)
//分片释放的每片最小Size,小于这个值无法释放,因为可能无法存放元数据而无法管理
#define SLICE_SIZE_MIN (2 * sizeof(seg_item))
typedef struct slice_info {
 void* ptr; //分片内存的起始地址
 int32_t size; //分片内存的大小,必须大于等于SLICE_SIZE_MIN
} slice_info;
typedef struct slice_info_array {
 int32_t num; //需要释放几块分片内存
 slice_info slice_arr[SLICE_INFO_NUM_MAX + 1]; //每块分片内存的起始地址指针
 //释放中间内存后,返回的内存被切开,因此数量+1
} slice_info_array;
/**
 * @brief 内存分片释放
 * @param pool 内存池指针
 * @param ptr 待分片释放的内存头指针
 * @param info 待分片释放的内存指针
 * @return 见:FREE_RET_*
 * 释放成功后,切分的分片内存块存在参数info里返回出来。
 */
int memory_pool_slice_free(memory_pool *pool, void *ptr, slice_info_array *info);

About

The biggest feature of a memory pool is its support for shard release.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /