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 通过操作系统文件缓存来利用余下的内存.那些 ...
随机推荐
- Hadoop完全分布式安装配置完整过程
一. 硬件.软件准备 1. 硬件设备 为了方便学习Hadoop,我采用了云服务器来配置Hadoop集群.集群使用三个节点,一个阿里云节点.一个腾讯云节点.一个华为云节点,其中阿里云和腾讯云都是通过使用 ...
- jsp部分
1,struts2下拉框,直接赋值.<s:select list="#{'':'---请选择---','0':'否','1':'是'}"listKey="key&q ...
- jdk 1.8中的list排序
首先看看collections实现 public static <T> void sort(List<T> list, Comparator<? super T> ...
- 虚拟机安装: vmware + ubuntu16.04
参考博客:https://blog.csdn.net/qq1326702940/article/details/82322079 这个博客讲的很详细,只要ubuntu版本相同,应该是一模一样. 注意点 ...
- linux下杀进程的方法
http://www.linuxidc.com/Linux/2011-08/40052.htm kill -s 9 2222
- IntelliJ IDEA 2018.2激活
IntelliJ IDEA 2018.2激活 下载补丁 下载补丁JetbrainsIdesCrack-4.2.jar 下载链接 修改文件 将文件JetbrainsIdesCrack-4.2.jar放在 ...
- np的concatenate和pandas的groupby
1. concatenate concatenate函数可以实现对两个张量进行拼接,这个张量可以实一维向量,二维矩阵等等 1. 首先定义四个列表,然后用concatenate把他们拼接起来,这里我设a ...
- webdriervAPI(操作cookie)
from selenium import webdriver driver = webdriver.Chorme() driver.get("http://www.baidu.co ...
- C学习笔记-结构体
结构体的定义和初始化 结构体是简单数据类型的综合 struct man { char name[100]; int age; }; struct man m = { "tom", ...
- 关于Typescript - HTMLElement上使用append / prepend函数的问题
因最近在做浏览器打印界面水印的问题,用到后台动态创建标签,样式的处理用到了append,prend函数,Angular build打包的时候却抛出了异常↓ ERROR in src/app/route ...