/**
* 内存配置
* 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)分配策略的优势。

lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?的更多相关文章

  1. JVM内存配置参数-XMX,-XMS,-XMN的例子

    转载:http://www.nowcoder.com/questionTerminal/093bfa948d144ce3b0a68b938ae8b4ec 对于JVM内存配置参数: -Xmx10240m ...

  2. jvm内存配置参数

    请看下面题目: 对于jvm内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 其最小内存值和Survior区总大小分别是: a. 51 ...

  3. JVM内存配置详解

    前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...

  4. JVM内存配置详解(转)

    前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...

  5. PostgreSQL内存配置记录

    PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录. postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.mai ...

  6. tomcat内存配置(二)

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进 ...

  7. Java虚拟机内存配置

    在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError等.这是个让开发人员很痛苦.也很纠结的问题,因为我们有时不知道什么样的操作导致了这种问题的发生.所 ...

  8. Yarn简单介绍及内存配置

    本文出自:http://blog.chinaunix.net/uid/28311809/abstract/1.html 在这篇博客中,主要介绍了Yarn对MRv1的改进,以及Yarn简单的内存配置和Y ...

  9. Elasticsearch 内存配置应用案例

    Elasticsearch 内存配置 有三个可选项: 你主要做全文检索吗?考虑给 Elasticsearch 4 - 32 GB 的内存, 让 Lucene 通过操作系统文件缓存来利用余下的内存.那些 ...

随机推荐

  1. fiddler过滤指定的请求

    需要过滤的请求如图: 设置过滤: 正则表达式(REGEX:\.(js|css|google|favicon\?.*)+)

  2. 生成html报告

    jmeter -g "D:\JMeter WorkSpace\JMeterScript\IAC\Aggregate Graph\AggregateGraph.csv" -o &qu ...

  3. Java实现批量下载选中文件功能

    1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...

  4. Markdown 介绍

    Markdown 是目前互联网上最流行的写作语言,它使用一些简单的符号(* / ` > [] () #)来标记文本格式,其简洁的语法.优美的格式以及强大的软件支持深受广大网友的喜爱.维基百科上对 ...

  5. Java多线程(1):3种常用的实现多线程类的方法

    (1) 继承java.lang.Thread类(Thread也实现了Runnable接口) 继承Thread类的方法是比较常用的一种,如果说你只是想起一条线程.没有什么其它特殊的要求,那么可以使用Th ...

  6. C# Path.Combine 缺陷(http路径用Uri类)

    Path.Combine: 什么时候会用到Path.Combine呢?,当然是连接路径字符串的时候! 所以下面的代码可以完美的工作: public static void Main() { strin ...

  7. java:solr

    1.solr(数据导入solr自带数据库):   ImportItemController.java: package com.solr.controller; import org.springfr ...

  8. windows下打开.ipynb文件

    windows下打开.ipynb文件1.首先要下载python,设置环境变量2.下载pip,设置环境变量3.打开命令行,进入到python的Scripts文件中,按顺序执行下面三个命令pip inst ...

  9. JavaScript基础入门09

    目录 JavaScript 基础入门09 Event 自定义右键菜单 获取鼠标按键 获取鼠标坐标 获取键盘按键 页面中位置的获取 浏览器的默认行为 冒泡 什么是冒泡 小练习 JavaScript 基础 ...

  10. JavaScript基础入门05

    目录 JavaScript 基础入门05 严格模式 严格模式的设计目的 如何开启使用严格模式 显式报错 字符串 字符串的创建 字符串实例方法之常用API JavaScript 基础入门05 严格模式 ...