多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在前面的章节也说了,LwIP支持使用C标准库的malloc与free进行内存的管理,当宏定义MEM_LIBC_MALLOC被定义的时候,编译器就会把以下代码编译进去,就会采用C标准库的malloc与free函数,具体见代码清单 5-14。 ``` 1 #if MEM_LIBC_MALLOC 2 void 3 mem_init(void) 4 { 5 } 6 void * 7 mem_trim(void *mem, mem_size_t size) 8 { 9 LWIP_UNUSED_ARG(size); 10 return mem; 11 } 12 13 #ifndef mem_clib_free 14 #define mem_clib_free free 15 #endif 16 #ifndef mem_clib_malloc 17 #define mem_clib_malloc malloc 18 #endif 19 #ifndef mem_clib_calloc 20 #define mem_clib_calloc calloc 21 #endif 22 23 #define MEM_LIBC_STATSHELPER_SIZE 0 24 25 #endif ``` 如果用户选择了使用C标准库这种方式管理内存,那么内存处理函数void mem_init(void)和void* mem_trim(void *mem, mem_size_t size)将没有实际的实现内容,因为既然选择了C库策略,那肯定必然是没法实现的,当然ram_heap也不会被编译,用户申请的内存块是在C标准库管理的系统堆中进行的,这就意味着我们必须将整个C标准库初始化好,并为其建立内存堆空间。所以我们不建议使用这种方式进行内存管理。