蓝盟IT小贴士,来喽!
01内存池
LWIP中的内存池(POOL )分配策略简单,但内存分配、释放效率高,可以有效防止内存碎片的产生。 根据内存策略,用户只能请求固定大小的空间。 内存池方法主要用于LWIP内核中的固定数据结构分配(UDP控制块、TCP控制块等)。 LWIP内核在初始化时对各数据结构类型进行了一定数量的POOL初始化,文件memp.c和memp.h是内存池相关内容。
LWIP内核建立的POOL类型取决于用户和系统配置。 例如,如果宏LWIP_UDP为1,则在编译时建立与UDP控制块的数据结构相关联的存储器池pool (memp _ UDP _ PCB ),如果宏LWIP_TCP为1,则在编译时建立TTP 各类型的POOL尺寸是固定的。 用户可以在LWIPopts.h文件中定义。 lwip在opt.h中设定了默认值。
有6个与LWIP内存池相关的全局变量和数据结构。 memp_t、memp _ tab、memp_sizes[]、memp_num[]、memp_desc[]、内存。
上面提到的内存池(POOL )和内存堆栈(HEAP )两个内存策略是LWIP的默认内存策略,LWIP内核大量使用这两个策略,但LWIP提供了其他可选的内存策略
(1)、当定义宏MEM_LIBC_MALLOC为1时,与存储器栈相关的代码不被编译,存储器栈中的mem_malloc ()和mem_free ()是ANSIC编译器附带的m
(2)、如果定义宏MEMP_MEM_MALLOC为1,则不编译内存池文件memp.c。
(3)、如果将宏MEM_USE_POOLS定义为1,则内存池的分配策略非常有效,因此不会编译内存池分配的函数或全局变量。
但是,(3)中的方法使用起来很麻烦,需要在lwipopts.h中将宏MEM_USE_POOLS和MEM_USE_CUSTOM_POOLS定义为1。 此外,还必须在另一个头文件lwippools.h中打开内存栈分配函数的内存池。
文/上海蓝盟 IT外包专家