Skip to content

Commit 01c38f8

Browse files
committed
feat: 新增注释说明 #11
1 parent f348d7d commit 01c38f8

3 files changed

Lines changed: 17 additions & 15 deletions

File tree

memorypool.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
pthread_mutex_unlock(&lockobj->lock); \
1313
} while (0)
1414

15-
#define MP_ALIGN_SIZE(_n) (_n + sizeof(long) - ((sizeof(long) - 1) & _n))
15+
#define MP_ALIGN_SIZE(_n) (_n + sizeof(long) - ((sizeof(long) - 1) & (_n)))
1616

1717
#define MP_INIT_MEMORY_STRUCT(mm, mempool_sz) \
1818
do { \
@@ -153,7 +153,7 @@ MemoryPool* MemoryPoolInit(mem_size_t max_mempool_size, mem_size_t mempool_size)
153153
mp->last_id = 0;
154154
if (mempool_size < max_mempool_size) mp->auto_extend = 1;
155155
mp->max_mempool_size = max_mempool_size;
156-
mp->total_mempool_size = mp->mempool_size = mempool_size;
156+
mp->alloc_mempool_size = mp->mempool_size = mempool_size; // 初始分配一个内存池
157157

158158
#ifdef _Z_MEMORYPOOL_THREAD_
159159
pthread_mutex_init(&mp->lock, NULL);
@@ -181,7 +181,7 @@ void* MemoryPoolAlloc(MemoryPool* mp, mem_size_t wantsize) {
181181
MP_ALIGN_SIZE(wantsize + MP_CHUNKHEADER + MP_CHUNKEND);
182182
if (total_needed_size > mp->mempool_size) return NULL;
183183

184-
_MP_Memory *mm = NULL, *mm1 = NULL;
184+
_MP_Memory *mm = NULL;
185185
_MP_Chunk *_free = NULL, *_not_free = NULL;
186186
#ifdef _Z_MEMORYPOOL_THREAD_
187187
MP_LOCK(mp);
@@ -250,17 +250,17 @@ void* MemoryPoolAlloc(MemoryPool* mp, mem_size_t wantsize) {
250250

251251
if (mp->auto_extend) {
252252
// 超过总内存限制
253-
if (mp->total_mempool_size >= mp->max_mempool_size) {
253+
if (mp->alloc_mempool_size + total_needed_size >= mp->max_mempool_size) {
254254
goto err_out;
255255
}
256+
// 剩余可新增内存池大小
256257
mem_size_t add_mem_sz = mp->max_mempool_size - mp->mempool_size;
258+
// 如果空间足够则按 mempool_size 新增, 不足则分配剩下所有内存
257259
add_mem_sz = add_mem_sz >= mp->mempool_size ? mp->mempool_size
258260
: add_mem_sz;
259-
mm1 = extend_memory_list(mp, add_mem_sz);
260-
if (!mm1) {
261-
goto err_out;
262-
}
263-
mp->total_mempool_size += add_mem_sz;
261+
if (!extend_memory_list(mp, add_mem_sz)) goto err_out;
262+
// 更新实际分配内存
263+
mp->alloc_mempool_size += add_mem_sz;
264264

265265
goto FIND_FREE_CHUNK;
266266
}
@@ -329,7 +329,7 @@ int MemoryPoolDestroy(MemoryPool* mp) {
329329
}
330330

331331
mem_size_t GetTotalMemory(MemoryPool* mp) {
332-
return mp->total_mempool_size;
332+
return mp->alloc_mempool_size;
333333
}
334334

335335
mem_size_t GetUsedMemory(MemoryPool* mp) {

memorypool.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,19 @@ typedef struct _mp_chunk {
2222
typedef struct _mp_mempool_list {
2323
char* start;
2424
unsigned int id;
25-
mem_size_t mempool_size;
26-
mem_size_t alloc_mem;
27-
mem_size_t alloc_prog_mem;
25+
mem_size_t mempool_size; // 固定值 每个内存池最大内存
26+
mem_size_t alloc_mem; // 统计值 当前池内已分配的内存总大小
27+
mem_size_t alloc_prog_mem; // 统计值 当前池内实际分配给应用程序的内存总大小(减去内存管理元信息)
2828
_MP_Chunk *free_list, *alloc_list;
2929
struct _mp_mempool_list* next;
3030
} _MP_Memory;
3131

3232
typedef struct _mp_mempool {
3333
unsigned int last_id;
3434
int auto_extend;
35-
mem_size_t mempool_size, total_mempool_size, max_mempool_size;
35+
mem_size_t mempool_size; // 固定值 每个内存池最大内存
36+
mem_size_t max_mempool_size; // 固定值 所有内存池加和总上限
37+
mem_size_t alloc_mempool_size; // 统计值 当前已分配的内存池总大小
3638
struct _mp_mempool_list* mlist;
3739
#ifdef _Z_MEMORYPOOL_THREAD_
3840
pthread_mutex_t lock;

test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ void* test_fn(void* arg) {
143143
SHOW("Free After: ", mp);
144144
#endif
145145
printf("Memory Pool Size: %.4lf MB\n",
146-
(double) mp->total_mempool_size / 1024 / 1024);
146+
(double) mp->alloc_mempool_size / 1024 / 1024);
147147
#endif
148148
printf("Total Usage Size: %.4lf MB\n", (double) total_size / 1024 / 1024);
149149

0 commit comments

Comments
 (0)