lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?
2024-08-28 10:56:37
/**
* 内存配置
* suozhang 2019年9月6日20:25:48 参考 <<LwIP 应用开发实战指南>> 野火 第5章 LwIP 的内存管理
*
* 动态内存池(POOL): 申请大小必须是指定固定大小字节的值(如4、8、16 等等),系统将所有可用区域以
* 固定大小的字节单位进行划分,然后用单链表将所有空闲内存块连接起来。链表中所有节
* 点大小相同,分配,释放都非常简单。
*
* 动态内存堆(heap)又可以分为两种:一种是 C 标准库自带的内存管理策略,
* 另一种是LwIP 自身实现的内存堆管理策略。这两者的选择需要通过宏值
* MEM_LIBC_MALLOC 来选择,且二者只能选择其一。
*
* 动态内存池(POOL)可由动态内存堆管理(heap)实现,
* 反之,内存堆也可以由内存池实现。
* 通过MEM_USE_POOLS 和MEMP_MEM_MALLOC
* 这两个宏定义来选择,且二者只能选择其一。
*
* 1、不使用 标准库 的 malloc、free 来进行动态内存堆管理(heap)管理,因此 MEM_LIBC_MALLOC = 0
* 2、内存池和内存堆独立实现,互不相干,因此 MEMP_MEM_MALLOC == MEM_USE_POOLS == 0
*
*/
lwip 使用 pbuf 数据结构 进行收发数据。
pbuf 数据结构分四种类型 :(参考<<LwIP 应用开发实战指南>>第6章 网络数据包)
LWIP 内存配置 和 内存 使用 什么 关系那?
1、PBUF_RAM类型的pbuf 空间是通过动态内存堆(heap)分配而来
2、PBUF_POOL 类型的pbuf 空间是通过动态内存池(POOL)分配而来
3、PBUF_ROM 和 PBUF_REF 类型的pbuf 基本是一样的,它们在动态内存池(POOL)申请的pbuf 不包含数据区域,只包含pbuf 结构体。
什么时候 用 PBUF_RAM 类型数据?
答:一般协议栈中要发送的数据都是采用这种形式。原因: 每次收发数据长度不一,因此使用 动态内存堆(heap) 这种方式。
什么时候 用 PBUF_POOL 类型数据?
答:在以太网卡(网线)接收数据的时候采用这种形式。原因: 因为从硬件里拿到数据时间要短(防止丢数据),而PBUF_POOL 可以在极短的时间内分配得到,因为这是 动态内存池(POOL)分配策略的优势。
最新文章
- 初始webservice
- virtualbox ubuntu 网络连接 以及 连接 secureCRT
- 【原】安装mongo的php插件
- IPTV视频基本概念
- 学习WPF——WPF布局——了解布局容器
- MATLAB信号与系统分析(五)&mdash;&mdash;连续时间信号的频谱分析
- 服饰行业淘宝商城店铺首页设计报告-转载自http://bbs.paidai.com/topic/88363
- ViewPager的基本使用--可左右循环切换也可自动切换
- LIS n*log(n)的理解
- JS 节流阀
- [置顶] Android4.x对长按电源键(挂断键)和短按电源键(挂断键)的详细处理流程
- E. Devu and Flowers
- What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security
- Django学习(一)
- matlab 三维激光雷达点云的地面与障碍物检测
- jsp标签库选择框示例
- Python 套接字socketserver网络编程
- php设计模式-工厂模式(一)
- oracle中并行执行不一定比串行执行快
- MySQL主从同步最佳实践