SylixOS_LWIP协议栈学习:动态内存管理
来源:互联网 发布:stussy淘宝 编辑:程序博客网 时间:2024/06/06 15:57
1.LWIP中的动态内存管理有三种方式
运行时C库自带的内存分配方式、LWIP中自带的内存堆(HEAP)分配方式、内存池(POOL)分配方式。
内存堆的特点是对一块事先分配好的内存块进行合理有效的组织和管理,主要用于任意大小的内存分配。缺点是容易产生内存碎片。
内存池的特点是预先开辟许多固定大小的内存块组织成链表,实现快速分配/回收,且不会产生内存碎片,但大小固定会带来一定内存浪费。
2.LWIP宏编译开关
SylixOS在(/libsylixos/SylixOS/include/network/lwip/opt.h)中通过宏配置选不同的内存管理方式:
若定义MEM_LIBC_MALLOC = 1,直接使用C库中的malloc、free来分配动态内存;否则使用LWIP自带的mem_malloc、mem_free等函数。
若定义MEMP_MEM_MALLOC = 1,则用内存堆来实现内存池分配,使用这种方式得考虑是否能忍受内存堆分配带来的时间延迟。
若定义MEM_USE_POOLS = 1,则用内存池来实现内存堆的分配,使用这种方式得考虑是否能忍受因为POOL内存固定大小而带来的内存浪费。
总结:
C库中的malloc、free和LWIP自带的mem_malloc、mem_free具有很大相似性,这两种策略使用者只能从中选择一种,通过MEM_LIBC_MALLOC来实现。
当它被定义为 1 时则使用标准 C运行时库自带的内存分配策略,而为 0 时则使用 LWIP 自身的动态内存堆分配策略。
在(/libsylixos/SylixOS/config/net/net_perf_cfg.h)中,对于内存堆和内存池的大小是可以配置的,通过合理的配置可以有效提升性能。
LW_CFG_LWIP_MEM_SIZE定义了内存堆区大小,LW_CFG_LWIP_POOL_SIZE和LW_CFG_LWIP_NUM_POOLS定义了内存池的大小和数量。
0 0
- SylixOS_LWIP协议栈学习:动态内存管理
- SylixOS_LWIP协议栈学习:数据包管理
- SylixOS_LWIP协议栈学习:网络接口结构
- SylixOS_LWIP协议栈学习:以太网网卡接口部分初始化
- LwIP协议栈学习--内存管理
- LwIP协议栈学习--内存管理
- LwIP协议栈学习--内存管理
- OC学习 第十一章 协议 内存管理
- [C++学习笔记]动态内存管理
- c++ 学习笔记之动态内存管理
- LwIP 协议栈源码详解 ——TCP/IP 协议的实现(三:动态内存管理)
- C++动态内存创建与内存管理学习笔记[1]
- C++动态内存创建与内存管理学习笔记[2]
- C++动态内存创建与内存管理学习笔记[3]
- C++动态内存创建与内存管理学习笔记[4]
- C++动态内存创建与内存管理学习笔记
- 嵌入式LwIP协议栈的内存管理
- linux TCP协议栈内存管理总结
- spring 事件驱动模型简介
- JS知识体系构建--持续更新
- 优化MyEclipse保存页面卡顿
- MySQL基本操作
- 返回值为结构体,返回值可能为空时候的处理情况
- SylixOS_LWIP协议栈学习:动态内存管理
- Protobuf3语言指南
- nginx 根据不同url反向代理到不同服务器
- angular$http.post后台不能获取参数的问题
- android activity启动的时候隐藏软键盘
- [C++基础]typedef 函数指针的用法
- oracle序列详解
- phpexcel导入数据库 基于thinkphp3.2
- mysql中DATE_FORMAT函数用法详解