/**
* 內存配置 * 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)分配策略的優勢。
