lwip的内存管理
2024-09-03 22:44:04
lwip可以不用malloc,而完全用pool,全用全局变量,没看明白怎么实现的。
#if LWIP_NETCONN || LWIP_SOCKET
LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF")
LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN")
#endif /* LWIP_NETCONN || LWIP_SOCKET */
#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc)
/**
* @ingroup mempool
* Declare a private memory pool
* Private mempools example:
* .h: only when pool is used in multiple .c files: LWIP_MEMPOOL_PROTOTYPE(my_private_pool);
* .c:
* - in global variables section: LWIP_MEMPOOL_DECLARE(my_private_pool, 10, sizeof(foo), "Some description")
* - call ONCE before using pool (e.g. in some init() function): LWIP_MEMPOOL_INIT(my_private_pool);
* - allocate: void* my_new_mem = LWIP_MEMPOOL_ALLOC(my_private_pool);
* - free: LWIP_MEMPOOL_FREE(my_private_pool, my_new_mem);
*
* To relocate a pool, declare it as extern in cc.h. Example for GCC:
* extern u8_t __attribute__((section(".onchip_mem"))) memp_memory_my_private_pool[];
*/
#define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \
LWIP_DECLARE_MEMORY_ALIGNED(memp_memory_ ## name ## _base, ((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))); \
\
LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(memp_stats_ ## name) \
\
static struct memp *memp_tab_ ## name; \
\
const struct memp_desc memp_ ## name = { \
DECLARE_LWIP_MEMPOOL_DESC(desc) \
LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(memp_stats_ ## name) \
LWIP_MEM_ALIGN_SIZE(size), \
(num), \
memp_memory_ ## name ## _base, \
&memp_tab_ ## name \
}; #endif /* MEMP_MEM_MALLOC */
1 #ifndef LWIP_DECLARE_MEMORY_ALIGNED
2 #define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]
3 #endif
最新文章
- Vijos1006P1006晴天小猪历险记之Hill[最短路]
- >;>;>; 主页推荐链接
- C# 文字转声音
- oracle 10G以上版本 树形查询新加的几个功能
- 读写txt文件
- think straight系列读书笔记之《暗时间》
- LeeCode-Rotate Array
- MongoDB学习笔记-认识MongoDB
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
- sevlet的url-pattern设置
- 飞机找不到,流量哪去了?记一次移动WAP网关导致的问题
- python-面向对象-08_多态
- redis哨兵机制一(转)
- 洛谷P4428二进制 [BJOI2018] 线段树
- Android异步处理之AsyncTaskLoader简单使用
- git指令整理汇总
- js实现选项卡切换
- 4. NBU文件备份与恢复,图形界面&;字符界面操作
- Flex接收51单片机发送过来的16进制数据转换为String
- [转]升级Flash Builder 4.6中的Flash Player版本