前言
在这个色彩缤纷的时代,网络扮演着重要的角色,作为网络通讯的主要协议,TCP/IP协议就变得非常的重要,对于嵌入式系统来说,处理能力以及内存上的瓶颈导致嵌入式TCP/IP协议栈不可能像PC上的协议栈那么强大,而LWIP作为一个小型的开源免费的TCP/IP协议栈,以简洁,高效,占用内存少被广泛的使用在各类嵌入式网络应用中,本文就是基于LWIP的内存角度开展的。
正文
本文将从三个角度来分析LWIP的memp内存池机制。
【1】memp相关宏以及变量的解释
【2】Memp的内存机制原理
【3】Memp的源码分析
为了让大家更好的理解lwip的源码,我觉得从开头就将一些关键的变量或者结构根大家做一个介绍,以方便更好的配合源码阅读。
1、memp相关宏以及变量的解释
【1】宏定义解释
1) MEMP_MEM_MALLOC 定义是否使用内存堆机制来为内存池分配内存
2) MEM_USE_POOLS 定义使用内存池来给内存堆分配内存
3) MEMP_OVERFLOW_CHECK 溢出检测
4) MEMP_SANITY_REGION_BEFORE 内存池下溢检测区域大小
5) MEMP_SANITY_REGION_AFTER 内存池溢出检测区域大小
6) MEMP_SIZE 对齐后的mem结构的大小(用于管理memp)
7) MEMP_ALIGN_SIZE(x) 计算x进行内存对齐后的大小
8) LWIP_DEBUG lwip的调试输出
9) MEMP_SEPARATE_POOLS 定义memp是否使用分离的内存池
10) MEMP_SANITY_CHECK 定义memp是否开启环路检测
【2】数据结构
struct memp {
struct memp *next; //下一个可用内存池的首地址
#if MEMP_OVERFLOW_CHECK
const char *file;
int line;
#endif /* MEMP_OVERFLOW_CHECK */
};
memp的内存管理结构
这个数据结构是memp最重要的数据结构,其主要实现对memp的管理,包括内存的分配和回收等。
【3