|
12 | 12 | pthread_mutex_unlock(&lockobj->lock); \ |
13 | 13 | } while (0) |
14 | 14 |
|
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))) |
16 | 16 |
|
17 | 17 | #define MP_INIT_MEMORY_STRUCT(mm, mempool_sz) \ |
18 | 18 | do { \ |
@@ -153,7 +153,7 @@ MemoryPool* MemoryPoolInit(mem_size_t max_mempool_size, mem_size_t mempool_size) |
153 | 153 | mp->last_id = 0; |
154 | 154 | if (mempool_size < max_mempool_size) mp->auto_extend = 1; |
155 | 155 | 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; // 初始分配一个内存池 |
157 | 157 |
|
158 | 158 | #ifdef _Z_MEMORYPOOL_THREAD_ |
159 | 159 | pthread_mutex_init(&mp->lock, NULL); |
@@ -181,7 +181,7 @@ void* MemoryPoolAlloc(MemoryPool* mp, mem_size_t wantsize) { |
181 | 181 | MP_ALIGN_SIZE(wantsize + MP_CHUNKHEADER + MP_CHUNKEND); |
182 | 182 | if (total_needed_size > mp->mempool_size) return NULL; |
183 | 183 |
|
184 | | - _MP_Memory *mm = NULL, *mm1 = NULL; |
| 184 | + _MP_Memory *mm = NULL; |
185 | 185 | _MP_Chunk *_free = NULL, *_not_free = NULL; |
186 | 186 | #ifdef _Z_MEMORYPOOL_THREAD_ |
187 | 187 | MP_LOCK(mp); |
@@ -250,17 +250,17 @@ void* MemoryPoolAlloc(MemoryPool* mp, mem_size_t wantsize) { |
250 | 250 |
|
251 | 251 | if (mp->auto_extend) { |
252 | 252 | // 超过总内存限制 |
253 | | - if (mp->total_mempool_size >= mp->max_mempool_size) { |
| 253 | + if (mp->alloc_mempool_size + total_needed_size >= mp->max_mempool_size) { |
254 | 254 | goto err_out; |
255 | 255 | } |
| 256 | + // 剩余可新增内存池大小 |
256 | 257 | mem_size_t add_mem_sz = mp->max_mempool_size - mp->mempool_size; |
| 258 | + // 如果空间足够则按 mempool_size 新增, 不足则分配剩下所有内存 |
257 | 259 | add_mem_sz = add_mem_sz >= mp->mempool_size ? mp->mempool_size |
258 | 260 | : 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; |
264 | 264 |
|
265 | 265 | goto FIND_FREE_CHUNK; |
266 | 266 | } |
@@ -329,7 +329,7 @@ int MemoryPoolDestroy(MemoryPool* mp) { |
329 | 329 | } |
330 | 330 |
|
331 | 331 | mem_size_t GetTotalMemory(MemoryPool* mp) { |
332 | | - return mp->total_mempool_size; |
| 332 | + return mp->alloc_mempool_size; |
333 | 333 | } |
334 | 334 |
|
335 | 335 | mem_size_t GetUsedMemory(MemoryPool* mp) { |
|
0 commit comments