3.1.2 内存池的实现与场景分析

编程入门 行业动态 更新时间:2024-10-25 17:19:06

3.1.2 内存池的实现与<a href=https://www.elefans.com/category/jswz/34/1770727.html style=场景分析"/>

3.1.2 内存池的实现与场景分析

1.避免频繁分配/释放内存(产生大量的内存碎片)
分配固定大小:

#define MEM_PAGE_SIZE 0x1000typedef 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);}

更多推荐

3.1.2 内存池的实现与场景分析

本文发布于:2023-12-03 08:45:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1653370.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:场景   内存

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!