lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?
/**
* 内存配置
* 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)分配策略的优势。
lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?的更多相关文章
- JVM内存配置参数-XMX,-XMS,-XMN的例子
转载:http://www.nowcoder.com/questionTerminal/093bfa948d144ce3b0a68b938ae8b4ec 对于JVM内存配置参数: -Xmx10240m ...
- jvm内存配置参数
请看下面题目: 对于jvm内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 其最小内存值和Survior区总大小分别是: a. 51 ...
- JVM内存配置详解
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- JVM内存配置详解(转)
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- PostgreSQL内存配置记录
PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录. postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.mai ...
- tomcat内存配置(二)
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进 ...
- Java虚拟机内存配置
在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError等.这是个让开发人员很痛苦.也很纠结的问题,因为我们有时不知道什么样的操作导致了这种问题的发生.所 ...
- Yarn简单介绍及内存配置
本文出自:http://blog.chinaunix.net/uid/28311809/abstract/1.html 在这篇博客中,主要介绍了Yarn对MRv1的改进,以及Yarn简单的内存配置和Y ...
- Elasticsearch 内存配置应用案例
Elasticsearch 内存配置 有三个可选项: 你主要做全文检索吗?考虑给 Elasticsearch 4 - 32 GB 的内存, 让 Lucene 通过操作系统文件缓存来利用余下的内存.那些 ...
随机推荐
- fiddler过滤指定的请求
需要过滤的请求如图: 设置过滤: 正则表达式(REGEX:\.(js|css|google|favicon\?.*)+)
- 生成html报告
jmeter -g "D:\JMeter WorkSpace\JMeterScript\IAC\Aggregate Graph\AggregateGraph.csv" -o &qu ...
- Java实现批量下载选中文件功能
1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...
- Markdown 介绍
Markdown 是目前互联网上最流行的写作语言,它使用一些简单的符号(* / ` > [] () #)来标记文本格式,其简洁的语法.优美的格式以及强大的软件支持深受广大网友的喜爱.维基百科上对 ...
- Java多线程(1):3种常用的实现多线程类的方法
(1) 继承java.lang.Thread类(Thread也实现了Runnable接口) 继承Thread类的方法是比较常用的一种,如果说你只是想起一条线程.没有什么其它特殊的要求,那么可以使用Th ...
- C# Path.Combine 缺陷(http路径用Uri类)
Path.Combine: 什么时候会用到Path.Combine呢?,当然是连接路径字符串的时候! 所以下面的代码可以完美的工作: public static void Main() { strin ...
- java:solr
1.solr(数据导入solr自带数据库): ImportItemController.java: package com.solr.controller; import org.springfr ...
- windows下打开.ipynb文件
windows下打开.ipynb文件1.首先要下载python,设置环境变量2.下载pip,设置环境变量3.打开命令行,进入到python的Scripts文件中,按顺序执行下面三个命令pip inst ...
- JavaScript基础入门09
目录 JavaScript 基础入门09 Event 自定义右键菜单 获取鼠标按键 获取鼠标坐标 获取键盘按键 页面中位置的获取 浏览器的默认行为 冒泡 什么是冒泡 小练习 JavaScript 基础 ...
- JavaScript基础入门05
目录 JavaScript 基础入门05 严格模式 严格模式的设计目的 如何开启使用严格模式 显式报错 字符串 字符串的创建 字符串实例方法之常用API JavaScript 基础入门05 严格模式 ...