内存管理: malloc()与free()的一种基于池表结构的实现
2012-05-04 18:44
330 查看
/** * Initialize this module. * * Carves out memp_memory into linked lists for each pool-type. */ void memp_init(void) { struct memp *memp; u16_t i, j; memp = LWIP_MEM_ALIGN(memp_memory); /* for every pool: */ for (i = 0; i < MEMP_MAX; ++i) { memp_tab[i] = NULL; /* create a linked list of memp elements */ for (j = 0; j < memp_num[i]; ++j) { memp->next = memp_tab[i]; memp_tab[i] = memp; memp = (struct memp *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i]); } } } /** * Get an element from a specific pool. * * @param type the pool to get an element from * * the debug version has two more parameters: * @param file file name calling this function * @param line number of line where this function is called * * @return a pointer to the allocated memory or a NULL pointer on error */ void * memp_malloc(memp_t type) { struct memp *memp; SYS_ARCH_DECL_PROTECT(old_level); SYS_ARCH_PROTECT(old_level); memp = memp_tab[type]; if (memp != NULL) { memp_tab[type] = memp->next; memp = (struct memp*)((u8_t*)memp + MEMP_SIZE); } else { MEMP_STATS_INC(err, type); } SYS_ARCH_UNPROTECT(old_level); return memp; } /** * Put an element back into its pool. * * @param type the pool where to put mem * @param mem the memp element to free */ void memp_free(memp_t type, void *mem) { struct memp *memp; SYS_ARCH_DECL_PROTECT(old_level); if (mem == NULL) return; memp = (struct memp *)((u8_t*)mem - MEMP_SIZE); SYS_ARCH_PROTECT(old_level); memp->next = memp_tab[type]; memp_tab[type] = memp; SYS_ARCH_UNPROTECT(old_level); }
相关文章推荐
- 内存管理: malloc()与free()的一种基于clib标准的实现
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- 单片机(不基于os)下如何实现简单的内存管理(malloc,realloc和free函数的重新实现)
- [转载] STL allocator的介绍和一个基于malloc/free的allocator的简单实现
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- 单片机(不基于os)下如何实现简单的内存管理(malloc,realloc和free函数的重新实现)
- 单片机(不基于os)下如何实现简单的内存管理(malloc,realloc和free函数的重新实现)
- C语言内存管理:malloc、calloc、free的实现
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- 单片机(不基于os)下如何实现简单的内存管理(malloc,realloc和free函数的重新实现)
- 基于malloc与free函数的实现代码及分析
- 基于malloc与free函数的实现代码及分析
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- [转载] STL allocator的介绍和一个基于malloc/free的allocator的简单实现
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数