蓝盟IT外包,谈谈Lwip内存管理策略

发布者:上海IT外包来源:http://www.lanmon.net点击数:1424

蓝盟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外包专家

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部