/**
* 内存配置
* 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_ROMPBUF_REF 类型的pbuf 基本是一样的,它们在动态内存池(POOL)申请的pbuf 不包含数据区域,只包含pbuf 结构体。

什么时候 用 PBUF_RAM 类型数据?

答:一般协议栈中要发送的数据都是采用这种形式。原因: 每次收发数据长度不一,因此使用 动态内存堆(heap) 这种方式。

什么时候 用 PBUF_POOL 类型数据?

答:在以太网卡(网线)接收数据的时候采用这种形式。原因: 因为从硬件里拿到数据时间要短(防止丢数据),而PBUF_POOL 可以在极短的时间内分配得到,因为这是 动态内存池(POOL)分配策略的优势。

最新文章

  1. 初始webservice
  2. virtualbox ubuntu 网络连接 以及 连接 secureCRT
  3. 【原】安装mongo的php插件
  4. IPTV视频基本概念
  5. 学习WPF——WPF布局——了解布局容器
  6. MATLAB信号与系统分析(五)&mdash;&mdash;连续时间信号的频谱分析
  7. 服饰行业淘宝商城店铺首页设计报告-转载自http://bbs.paidai.com/topic/88363
  8. ViewPager的基本使用--可左右循环切换也可自动切换
  9. LIS n*log(n)的理解
  10. JS 节流阀
  11. [置顶] Android4.x对长按电源键(挂断键)和短按电源键(挂断键)的详细处理流程
  12. E. Devu and Flowers
  13. What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security
  14. Django学习(一)
  15. matlab 三维激光雷达点云的地面与障碍物检测
  16. jsp标签库选择框示例
  17. Python 套接字socketserver网络编程
  18. php设计模式-工厂模式(一)
  19. oracle中并行执行不一定比串行执行快
  20. MySQL主从同步最佳实践

热门文章

  1. 阶段3 3.SpringMVC&#183;_05.文件上传_6 文件上传之跨服务器上传代码
  2. springboot中静态属性/静态方法从YAML(yml)读取配置属性
  3. IDEA下启动tomcat非常慢
  4. 12 mysql性能抖动
  5. PHP 生成器 yield理解
  6. vue项目中使用组件化开发
  7. numpy array和mat的乘法
  8. 338.比特位计数( Counting Bits)leetcode
  9. ZooKeeper常用命令行操作
  10. 从入门到自闭之Python入门