测试内存池

This commit is contained in:
1iaan
2026-01-31 15:38:52 +00:00
parent fbdcff6878
commit 003566b69a
29 changed files with 614 additions and 233 deletions

View File

@@ -72,6 +72,10 @@ void kvs_free_impl(void *ptr) {
}
}
int kvs_mem_printf(){
return mp_print(&global_mempool);
}
void *nMalloc(size_t size, const char * filename, const char *func, int line){
void *ptr = kvs_malloc_impl(size);

View File

@@ -30,6 +30,7 @@ MemLeakDetectMode kvs_get_memleak_detect(void);
void *kvs_malloc_impl(size_t size);
void kvs_free_impl(void *ptr);
int kvs_mem_printf();
void *nMalloc(size_t size, const char * filename, const char *func, int line);
void nFree(void *ptr, const char * filename, const char *func, int line);

View File

@@ -74,7 +74,7 @@ static mp_page_t* mp_page_create(mp_bucket_t *owner){
pg->prev = NULL;
pg->next = NULL;
bitmap_clear_all(pg->bitmap, 20);
bitmap_clear_all(pg->bitmap, 16);
char *p = (char*)page_payload(pg);
for(uint16_t i = 0;i < cap - 1; ++ i){
@@ -313,4 +313,18 @@ int mp_free(mp_pool_t *pool, void *ptr){
}
return 0;
}
int mp_print(mp_pool_t *pool){
int ret = 0;
printf("------\n");
for(int i = 0; i < MEMPOOL_NUM_CLASSES; i++){
mp_bucket_t *bucket = &pool->buckets[i];
if(bucket->page_count) ret += bucket->page_count;
printf("size:%ld, page:%d, empty:%d\n", bucket->block_size, bucket->page_count, bucket->empty_count);
}
printf("------\n");
printf("page count: %d\n", ret);
return ret;
}

View File

@@ -5,13 +5,14 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
// #define MEMPOOL_PAGE_SIZE 4096
#define MEMPOOL_PAGE_SIZE (1024*8)
#define MEMPOOL_PAGE_SIZE (4096*2)
#define MEMPOOL_BLOCK_MAX_SIZE 512
#define MEMPOOL_ALIGNMENT 8
#define MEMPOOL_NUM_CLASSES (MEMPOOL_BLOCK_MAX_SIZE / MEMPOOL_ALIGNMENT)
#define MEMPOOL_CACHE_PAGE 4
#define MEMPOOL_CACHE_PAGE 2
typedef struct mp_page_s mp_page_t;
typedef struct mp_bucket_s mp_bucket_t;
@@ -35,7 +36,7 @@ struct mp_page_s{
uint16_t free_count;
uint16_t capacity;
uint64_t bitmap[20]; // 最多支持 512/1280 个块 (64*20)
uint64_t bitmap[16]; // 最多支持 512/1280 个块 (64*20)
};
struct mp_bucket_s{
@@ -56,7 +57,7 @@ struct mp_large_s{
struct mp_pool_s{
mp_bucket_t buckets[MEMPOOL_NUM_CLASSES];
mp_large_t *large_list;
mp_large_t *large_list;
};
int mp_create(mp_pool_t *pool);
@@ -65,4 +66,6 @@ int mp_destroy(mp_pool_t *pool);
void *mp_alloc(mp_pool_t *pool, size_t size);
int mp_free(mp_pool_t *pool, void *ptr);
int mp_print(mp_pool_t *pool);
#endif