1.避免频繁分配/释放内存(产生大量的内存碎片)
分配固定大小:
#define MEM_PAGE_SIZE 0x1000 typedef struct mempool_s { int block_size; int free_count; char *free_ptr; char *mem; } mempool_t; int memp_init(mempool_t *m, int block_size) { if (!m) return -2; m->block_size = block_size; m->free_count = MEM_PAGE_SIZE / block_size; m->free_ptr = (char *)malloc(MEM_PAGE_SIZE); if (!m->free_ptr) return -1; m->mem = m->free_ptr; int i = 0; char *ptr = m->free_ptr; for (int i = 0; i < m->free_count; i++) { *(char**)ptr = ptr + block_size; ptr += block_size; } *(char **)ptr = NULL; return 0; } void *memp_alloc(mempool_t *m) { if (!m || m->free_count == 0) return NULL; void *ptr = m->free_ptr; m->free_ptr = *(char **)ptr; m->free_count--; return ptr; } void *memp_free(mempool_t *m, void *ptr) { *(char **)ptr = m->free_ptr; m->free_ptr = (char *)ptr; m->free_count++; return NULL; } int main() { mempool_t m; memp_init(&m, 32); void *p1 = memp_alloc(&m); printf("memp_alloc : %p\n", p1); void *p2 = memp_alloc(&m); printf("memp_alloc : %p\n", p2); void *p3 = memp_alloc(&m); printf("memp_alloc : %p\n", p3); void *p4 = memp_alloc(&m); printf("memp_alloc : %p\n", p4); memp_free(&m, p1); memp_free(&m, p3); void *p5 = memp_alloc(&m); printf("memp_alloc p5 : %p\n", p5); void *p6 = memp_alloc(&m); printf("memp_alloc p6 : %p\n", p6); memp_free(&m, p1); }