实现内存池的测试用例、继承jemalloc和自实现内存池。
This commit is contained in:
57
mem_pool/mem_pool.h
Normal file
57
mem_pool/mem_pool.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#ifndef __MEM_POOL_H__
|
||||
#define __MEM_POOL_H__
|
||||
|
||||
#define MEMORY_USE_DEFAULT 0
|
||||
#define MEMORY_USE_MYMALLOC 1
|
||||
#define MEMORY_USE_JEMALLOC 2
|
||||
|
||||
#define MEMORY_SELECT_MALLOC MEMORY_USE_MYMALLOC
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void *kvs_malloc(size_t size);
|
||||
void kvs_free(void *ptr);
|
||||
|
||||
|
||||
|
||||
#define MP_PAGE_SIZE 4096
|
||||
#define MP_MIN_SHIFT 3
|
||||
#define MP_MAX_SHIFT 12
|
||||
|
||||
#define MP_NBUCKETS (MP_MAX_SHIFT - MP_MIN_SHIFT + 1)
|
||||
#define MP_MAGIC 0xB10C0A11u
|
||||
#define MP_LARGE_CLASS 0xFFFFu
|
||||
|
||||
typedef struct mp_free_node {
|
||||
struct mp_free_node* next;
|
||||
} mp_free_node_t;
|
||||
|
||||
typedef struct mp_blk_hdr {
|
||||
uint32_t magic;
|
||||
uint16_t class_id; /* 0..MP_NBUCKETS-1, or MP_LARGE_CLASS */
|
||||
uint16_t reserved;
|
||||
} mp_blk_hdr_t;
|
||||
|
||||
typedef struct mp_page {
|
||||
void* mem;
|
||||
struct mp_page* next;
|
||||
} mp_page_t;
|
||||
|
||||
typedef struct mp_bucket {
|
||||
mp_free_node_t* free_list; /* 指向用户区 */
|
||||
} mp_bucket_t;
|
||||
|
||||
typedef struct mp_pool {
|
||||
mp_bucket_t buckets[MP_NBUCKETS];
|
||||
mp_page_t* pages; /* 所有申请过的页 */
|
||||
} mp_pool_t;
|
||||
|
||||
/* 初始化/销毁 */
|
||||
void mp_init(mp_pool_t* p);
|
||||
void mp_destroy(mp_pool_t* p);
|
||||
|
||||
/* 分配/释放 */
|
||||
void* mp_alloc(size_t size);
|
||||
void mp_free(void* ptr);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user