动态内存管理
memp_sizes数组
const u16_t memp_sizes[MEMP_MAX] = {
#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEM_ALIGN_SIZE(size),
#include "memp_std.h"
};
#define LWIP_MEMPOOL(name,num,size,desc) u8_t memp_memory_ ## name ## _base \
[((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))];
#include "memp_std.h"
memp_std.h
#if LWIP_RAW
LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB")
#endif /* LWIP_RAW */
#if LWIP_UDP
LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB")
#endif /* LWIP_UDP */
......
编译后
const u16_t memp_sizes[MEMP_MAX] =
{
MEM_ALIGNMENT - 1
+ [((MEMP_NUM_RAW_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))]/*memp_memory_RAW_PCB*/
+[((MEMP_NUM_UDP_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))]/*memp_memory_RAW_PCB*/
+......
}
本文详细介绍了LwIP中内存池的配置方法及其实现原理。通过memp_sizes数组和memp_memory宏定义,文章展示了如何为不同的协议栈组件分配内存。这有助于理解LwIP内存管理的具体细节。

6227


被折叠的 条评论
为什么被折叠?



