精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊一聊Lwip內存管理策略

存儲 存儲軟件
LWIP中的內存池(POOL)分配策略簡單,但是內存的分配、釋放效率高,可以有效的防止內存碎片的產生。

[[394238]]

01內存池

LWIP中的內存池(POOL)分配策略簡單,但是內存的分配、釋放效率高,可以有效的防止內存碎片的產生。在內存的策略下用戶只能申請固定大小的空間,內存池方法主要用于LWIP內核中固定數據結構的分配,比如UDP控制塊,TCP控制塊等。LWIP內核在初始化的時候已經為每個數據結構類型都初始化了一定數量的POOL,文件memp.c和memp.h就是內存池相關內容。

至于LWIP內核建立多少種POOL依賴于用戶和系統配置,比如如果定義了宏LWIP_UDP為1,那么在編譯時與UDP控制塊數據結構相關的內存池POOL就會被建立(MEMP_UDP_PCB),如果定義了宏LWIP_TCP為1,編譯時與TCP數據結構相關的內存池就會被建立(MEMP_TCP_PCB、MEMP_TCP_SEG)等等!每種類型的POOL大小都是固定的。用戶可以在lwipopts.h文件中定義,LWIP在opt.h中已經配置了默認值。

有6個與LWIP內存池有關的全局變量和數據結構:memp_t、memp_tab[]、memp_sizes[]、memp_num[]、memp_desc[]和memp_memory[]。

1.1、memp_t數據類型

memp_t為一個枚舉類型變量,用來給每個POOL取個名字,或者說是編號。memp_t在文件memp.h文件中定義,定義如下:

  1. #define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name

這句代碼意思是:

遇到LWIP_MEMPOOL(name,num,size,desc) 換成MEMP_##name

例如:在memp_std.h的34行

  1. LWIP_MEMPOOL(RAW_PCB,        MEMP_NUM_RAW_PCB,         sizeof(structraw_pcb),        "RAW_PCB"

變成了

 

  1. MEMP_RAW_PCB 

所以memp_t編譯之后如下:

  1. typedef enum 
  2.     MEMP_ RAW_PCB, 
  3.     MEMP_ UDP_PCB, 
  4.     MEMP_ TCP_PCB, 
  5.     MEMP_ TCP_PCB_LISTEN, 
  6.     MEMP_ TCP_SEG, 
  7.     MEMP_ REASSDATA, 
  8.      ……. 
  9.     MEMP_MAX 
  10. } memp_t; 

其中MEMP_MAX代表memp_t代表枚舉類型中元素總個數(C語言基礎知識),并不代表任何類型的POOL

1.2、memp_tab全局指針數組

memp_tab為一個全局指針數組,指向每類POOL的第一個POOL,memp_tab在文件memp.c文件中定義,定義如下:

1.3、memp_sizes全局數組

memp_sizes為一個全局數組,用來記錄每個POOL的大小,memp_sizes在文件memp.c文件中定義,定義如下:

編譯之后

  1. const u16_t memp_sizes[MEMP_MAX] = 
  2.     LWIP_MEM_ALIGN_SIZE(sizeof(struct raw_pcb)), 
  3.     LWIP_MEM_ALIGN_SIZE(sizeof(struct udp_pcb)), 
  4.     LWIP_MEM_ALIGN_SIZE(sizeof(struct tcp_pcb)), 
  5.     LWIP_MEM_ALIGN_SIZE(sizeof(structtcp_pcb_listen)), 
  6.     LWIP_MEM_ALIGN_SIZE(sizeof(struct tcp_seg)), 
  7.     ……. 

memp_sizes中保存了每種類型POOL的大小,這里的大小都是進行了內存對齊的。

這個宏定義,MEM_ALIGNMENT為4,也就是4字節對齊。

分析這個宏定義,也就說,當MEM_ALIGNMENT為4時,傳入的size為3時,變為4

申請3個字節,實際申請4個字節

申請6個字節,實際申請8個字節

申請18個字節,實際申請20個字節

1.4、 memp_num[]全局數組

memp_num為一個全局數組,用來記錄每類POOL中POOL的個數,memp_num在文件memp.c文件中定義,定義如下:

編譯之后

  1. const u16_t memp_num[MEMP_MAX] = 
  2.     (MEMP_NUM_RAW_PCB), 
  3.     (MEMP_NUM_UDP_PCB), 
  4.     (MEMP_NUM_TCP_PCB), 
  5.     (MEMP_NUM_TCP_PCB_LISTEN), 
  6.     (MEMP_NUM_TCP_SEG), 
  7.     …… 
  8. }; 

上面的MEMP_NUM_RAW_PCB、MEMP_NUM_UDP_PCB等等都是由用戶定義的,用來記錄對應的POOL的數量,用戶可以在lwipopts.h文件中定義,LWIP在opt.h中已經配置了默認值。

1.5、memp_desc[]全局型指針數組

memp_desc為一個全局型指針數組,指向每類POOL的描述符,memp_desc在文件memp.c文件中定義,定義如下:

編譯之后

  1. static const char *memp_desc[MEMP_MAX] = 
  2.    ("RAW_PCB"), 
  3.    ("UDP_PCB"), 
  4.    ("TCP_PCB"), 
  5.    ("TCP_PCB_LISTEN"), 
  6.    ("TCP_PCB_LISTEN"), 
  7.    ……. 
  8. }; 

memp_desc中的每個元素指向了一個字符串,這些字符串在統計信息輸出中可能用到。

1.6、memp_memory[]數組

memp_memory為一個數組,這個數組才是真正的內存池!!!這個數組在文件memp.c文件中定義,定義如下:

編譯之后

  1. static u8_t memp_memory 
  2.    MEM_ALIGNMENT – 1 
  3.    +((MEMP_NUM_RAW_PCB) * (MEMP_SIZE + 
  4.      MEMP_ALIGN_SIZE(sizeof(struct raw_pcb)) )) 
  5.    +((MEMP_NUM_UDP_PCB) * (MEMP_SIZE + 
  6.     MEMP_ALIGN_SIZE(sizeof(struct udp_pcb)) )) 
  7.    +((MEMP_NUM_TCP_PCB) * (MEMP_SIZE + 
  8.     MEMP_ALIGN_SIZE(sizeof(struct tcp_pcb)) )) 
  9.    …….. 
  10. ]; 

其中MEMP_SIZE表示需要在每個POOL頭部預留的空間,LWIP中在某些特殊場合使用該空間中的值來對POOL進行特殊處理,這里不使用該項功能,所以MEMP_SIZE為0,。如果使用到MEMP_SIZE的話也需要對這個大小進行內存對齊!

1.7、與內存池管理相關的函數:

使用內存池分配內存的優點在于速度快,效率高,不會產生內存碎片,但是缺點在于只能分配各種固定大小的內存空間,LWIP必須實現知道用戶要使用哪些類型的POOL,每種類型的POOL數量,然后根據這個需求建立內存池。

02內存堆

LWIP還提供了另外一種內存策略—內存堆,使用內存堆策略就可以隨便申請任意大小的內存了。但是這種方法效率和速度會有所下降。

使用內存堆策略的話用戶申請的內存大小有最小限制,所申請的內存大小不能小于MIN_SIZE,LWIP默認的MIN_SIZE為12個字節,在mem.c文件中。該值用戶可以自行定義。

使用內存堆策略,其有點事內存浪費小,比較簡單,適合于小內存的管理,但是缺點就是如果頻繁的進行動態內存申請和釋放的話,可能會造成嚴重的內存碎片,如果碎片嚴重的話可能會導致內存分配失敗!

內存堆策略下的內存空間是數組:ram_heap[]。在mem.c文件中。

與內存堆有關的函數有3個:

  1. mem_init() 
  2. mem_malloc() 
  3. mem_free() 

03其他內存策略

前面講的內存池(POOL)和內存堆(HEAP)這兩個內存策略都是LWIP默認的內存策略,LWIP內核中大量的使用了這兩個策略,不過LWIP也給我們提供了其他可選的內存策略。

(1)、當定義宏MEM_LIBC_MALLOC為1,那么與內存堆相關的代碼就不會被編譯的,內存堆中的mem_malloc()和mem_free()就會被ANSIC編譯器自帶的malloc()和free()替代。

(2)、當定義宏MEMP_MEM_MALLOC為1,那么內存池文件memp.c就不會被編譯。

(3)、當定義宏MEM_USE_POOLS定義為1,那么內存堆分配相關的函數及全局變量不會被編譯,這個時候就用內存池分配方式來實現內存堆的的分配方式,因為內存池的分配策略效率很高。

但是(3)中的方法使用起來比較麻煩,需要在lwipopts.h中定義宏MEM_USE_POOLS和MEM_USE_CUSTOM_POOLS都為1,還需要在另外一個頭文件lwippools.h中開辟一些用于內存堆分配函數的內存池。

 

責任編輯:武曉燕 來源: 知曉編程
相關推薦

2020-06-28 09:30:37

Linux內存操作系統

2022-05-18 16:35:43

Redis內存運維

2022-05-12 23:19:15

Redis內存碎片處理

2023-03-06 21:23:23

Redis數據庫

2019-03-20 14:29:46

Linux虛擬內存

2022-08-22 09:20:05

Kubernetes工作負載管理

2022-08-30 10:15:27

Kubernetes數據持久化管理

2023-07-25 15:06:39

2020-06-02 15:06:13

Tomcat配置頁面

2018-06-07 13:17:12

契約測試單元測試API測試

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2023-03-03 12:37:50

JavaJVM內存溢出

2021-08-02 07:57:02

內存Go語言

2024-04-03 09:03:05

2021-01-01 09:01:05

前端組件化設計

2020-08-12 08:34:16

開發安全We

2022-10-08 11:33:56

邊緣計算云計算

2018-01-10 14:13:04

測試矩陣API測試
點贊
收藏

51CTO技術棧公眾號

精品久久久久久电影| 美国三级日本三级久久99| 欧美一级高清片| 国产大尺度在线观看| 88av在线视频| 免费欧美视频| 欧美丝袜丝交足nylons图片| 亚洲欧美精品在线观看| 国产精品女人久久久| 91精品精品| 欧美成人福利视频| 毛片在线播放视频| 无码h黄肉3d动漫在线观看| 亚洲在线日韩| 欧美成人精品一区二区三区| 日韩网站在线播放| 欧洲亚洲精品久久久久| 亚洲黄色小说网站| 精品网站在线看| 中文字幕精品在线观看| 欧美另类视频| 亚洲欧美国产精品专区久久 | 国产成人精品久久久| 五月天激情丁香| 欧美综合自拍| 欧美日韩精品一区二区三区 | 国产日韩欧美一区在线 | 亚洲第一在线综合网站| 日本一区二区免费看| 国产福利免费视频| 久久aⅴ国产紧身牛仔裤| 久久大大胆人体| 亚洲精品乱码久久| 国产亚洲精彩久久| 午夜久久久久久久久| 亚洲精品高清国产一线久久| 国产成人毛毛毛片| 日日欢夜夜爽一区| 久久久久久香蕉网| 国产在线免费看| 日本福利一区| 欧美大黄免费观看| 天天干天天操天天玩| mm视频在线视频| |精品福利一区二区三区| 久久草.com| 性欧美8khd高清极品| 日韩精品成人一区二区三区 | 91av手机在线| 欧美日韩xxxx| 亚洲国产精品成人一区二区| 国产精欧美一区二区三区白种人| 黄视频网站在线观看| 亚洲精品日韩专区silk| 亚洲国产精品一区二区第四页av| 国产三级电影在线| 91丨porny丨蝌蚪视频| 91网免费观看| 国产精品久久久久久在线| 日韩成人免费在线| 91黄色8090| 九九热只有精品| 综合精品久久| 久久久精品网站| 久久久久久亚洲中文字幕无码| 澳门久久精品| 日韩女同互慰一区二区| 在线观看中文av| 婷婷精品久久久久久久久久不卡| 欧美最新大片在线看| 黄色片视频在线免费观看| 97人澡人人添人人爽欧美| 亚洲精品日日夜夜| 欧美aaa在线观看| 免费a级人成a大片在线观看| 国产精品每日更新| 杨幂一区欧美专区| 日本综合在线| 中文字幕一区二区视频| 伊甸园精品99久久久久久| 婷婷成人激情| 国产精品色婷婷| 亚洲午夜在线观看| 免费日本一区二区三区视频| 国产蜜臀av在线一区二区三区| 欧美在线视频一区二区三区| 青青草在线免费观看| www欧美成人18+| 欧美日韩在线精品| 国产裸舞福利在线视频合集| 国产日韩欧美电影| 亚洲三区在线| 最新国产在线拍揄自揄视频| 一区二区三区不卡视频在线观看 | 欧美日韩国产探花| 欧美激情欧美激情在线五月| 国产精品国产三级国产传播| 亚洲一区色图| 性欧美长视频免费观看不卡| 久久99精品波多结衣一区| 日欧美一区二区| 国产精品视频26uuu| 一级片一区二区三区| 国产伦精一区二区三区| 成人免费看黄网站| 性网爆门事件集合av| 99re这里都是精品| 亚洲电影一二三区| 国产精品扒开做爽爽爽的视频| 日韩毛片视频在线看| 免费网站在线观看视频 | 九色成人国产蝌蚪91| 最近2019年手机中文字幕 | 国产精品久久看| 26uuu成人| free性护士videos欧美| 在线国产电影不卡| 日本一区二区三区在线免费观看| 国产伦精品一区二区三区在线播放 | 精品日韩欧美在线| 国产特级黄色录像| 久久精品国产99久久| 91国产美女在线观看| 在线中文字幕网站| aaa亚洲精品| 精品在线视频一区二区| 乱人伦中文视频在线| 香蕉加勒比综合久久| 日本新janpanese乱熟| 亚洲综合色婷婷在线观看| 亚洲视频日韩精品| 免费一级特黄特色大片| 麻豆国产一区二区| 国产伦视频一区二区三区| 91亚洲精选| 婷婷久久综合九色国产成人| 国产欧美精品一二三| 伊人久久综合影院| 欧美激情aaaa| 一卡二卡三卡在线| 久久久久久99精品| 男的插女的下面视频| 亚洲欧洲二区| 亚洲性日韩精品一区二区| 亚洲黄色一区二区| 国产大陆精品国产| 一本一生久久a久久精品综合蜜| 中文在线免费二区三区| 精品1区2区在线观看| 日本精品在线免费观看| 秋霞电影网一区二区| 久久99精品久久久久久青青日本 | 九一免费在线观看| 欧美天堂一区| 亚洲人成在线免费观看| 国产精品7777777| 成人午夜av电影| 亚洲黄色网址在线观看| 欧美在线一级| 亚洲欧美综合图区| 久久国产黄色片| 成人美女视频在线观看| 97超碰在线视| 亚洲中文字幕一区| www.综合网.com| 555www色欧美视频| 色偷偷www8888| 人人狠狠综合久久亚洲| 日本一区二区久久精品| 日韩影片中文字幕| 精品国产一区a| 久久久精品国产sm调教| 国产福利一区二区三区视频| 亚洲综合网中心| 日本欧美在线| www.午夜精品| 97人人爽人人爽人人爽| ㊣最新国产の精品bt伙计久久| 日本人视频jizz页码69| 日韩在线综合| 成人精品在线观看| 1769免费视频在线观看| 欧美v日韩v国产v| 久久久久久久久久久影院| 日本一区二区三区四区在线视频| 青青草原国产在线视频| 黄色成人在线网址| 欧美一区二区三区四区五区六区| 在线免费看h| 色黄久久久久久| 高h震动喷水双性1v1| 欧美性猛交xxxx偷拍洗澡| 亚洲欧美另类日本| www.欧美色图| 亚洲精品自拍网| 亚洲黄色免费| 亚洲精品电影在线一区| 草莓视频一区二区三区| 国产精品白嫩初高中害羞小美女| 成人日日夜夜| 亚洲毛片在线观看| 99久久久无码国产精品免费| 欧美日韩在线影院| 翔田千里88av中文字幕| 久久久久久久国产精品影院| 久久久久久无码精品人妻一区二区| 美日韩精品视频| 干日本少妇视频| 国产一区网站| 国产精品一区二区欧美| 国产欧美在线观看免费| 国产91精品久| 国产剧情在线| 中文字幕日本欧美| 五月激情婷婷网| 日韩一区二区视频| 中文 欧美 日韩| 亚洲国产成人porn| 欧美激情精品久久久久久免费| 91免费看视频| 肉丝美足丝袜一区二区三区四| 日本亚洲最大的色成网站www| www.日本在线视频| 99久久视频| 无遮挡亚洲一区| 蜜桃国内精品久久久久软件9| 国产精品裸体一区二区三区| 在线观看亚洲精品福利片| 国产国语videosex另类| 99riav视频在线观看| 久久在线免费视频| 亚洲成人影院麻豆| 国产亚洲日本欧美韩国| 天天在线女人的天堂视频| 精品久久一区二区| 午夜精品久久久久久久99热黄桃 | 欧美成人黑人xx视频免费观看| 成在在线免费视频| 国产午夜精品一区理论片飘花| 亚洲 精品 综合 精品 自拍| 精品欧美乱码久久久久久1区2区| 国产99对白在线播放| 欧美天堂亚洲电影院在线播放| 黄色网址中文字幕| 色素色在线综合| 久久久久久久久久成人| 日韩欧美成人区| 成人免费毛片视频| 91福利在线免费观看| www五月天com| 日本道精品一区二区三区| 日日夜夜狠狠操| 91激情在线视频| 久久久国产免费| 欧美亚洲图片小说| 97精品人妻一区二区三区| 欧美伦理视频网站| 国产乱淫av片免费| 日韩欧美一区中文| 日韩中文字幕免费观看| 欧美精品一区二区在线观看| 少妇精品高潮欲妇又嫩中文字幕 | 黑人欧美xxxx| 久久久国产精品成人免费| 日韩欧美精品中文字幕| 中文字幕天堂在线| 4hu四虎永久在线影院成人| www久久久com| 亚洲国产精品网站| 国产精品免费播放| 久久久精品欧美| 伦理在线一区| 欧美在线亚洲一区| 九九久久国产| 97久久天天综合色天天综合色hd| 99精品中文字幕在线不卡| 精品九九九九| 欧美另类69xxxxx| 国产欧美123| 欧美亚洲在线| 亚洲欧美日本一区二区三区| 国产成人在线视频播放| 97伦伦午夜电影理伦片| 国产精品传媒在线| 国产污视频在线看| 欧美专区在线观看一区| 国产成人av免费看| 亚洲欧美制服另类日韩| 免费大片在线观看www| 久久久久中文字幕| 蜜桃精品在线| 99超碰麻豆| 国产在视频线精品视频www666| 色香蕉在线观看| 亚洲精品看片| 伊人网在线综合| 99视频精品在线| 91视频免费看片| 红桃视频成人在线观看| 一区二区三区免费在线视频| 精品视频在线播放免| 国产福利在线播放麻豆| 欧洲成人午夜免费大片| 久久久久久爱| 日韩久久精品一区二区三区| 国产精品www994| 视色视频在线观看| 91视频在线看| 久久久久久久久久久久久女过产乱| 日韩欧美在线免费观看| 精品国产亚洲AV| 日韩在线小视频| 手机看片久久| 精品国产乱码久久久久久蜜柚| 国产精品99一区二区三区| 免费在线观看亚洲视频| 国产乱码精品一区二区三区av | 97av在线影院| 日本在线视频一区二区三区| 先锋影音亚洲资源| 亚洲中字在线| 你懂的在线观看网站| 夜色激情一区二区| 国产免费黄色大片| 中文字幕精品国产| 久久久人成影片一区二区三区在哪下载| 国产精品久久久久久久免费大片| 日韩精品久久| 各处沟厕大尺度偷拍女厕嘘嘘| 成人黄色综合网站| 亚洲色婷婷一区二区三区| 欧美日韩三级一区| 成人av一区| 国产精品福利在线| 岳的好大精品一区二区三区| 久久综合色视频| 菠萝蜜视频在线观看一区| 国产亚洲色婷婷久久99精品| 日韩午夜在线观看| www免费在线观看| 91九色国产在线| 91亚洲自偷观看高清| 在线免费观看av的网站| 国产日韩成人精品| 日本精品入口免费视频| 亚洲丝袜在线视频| 日韩三区在线| 一区二区三区av| 狠狠色狠狠色综合| 午夜精品福利在线视频| 欧美一区二区免费视频| 在线观看男女av免费网址| 91情侣偷在线精品国产| 中文字幕人成人乱码| 最好看的中文字幕| 亚洲综合在线第一页| 免费国产黄色片| 91精品国产九九九久久久亚洲| 日韩在线你懂的| 日韩少妇内射免费播放| 久久亚洲精精品中文字幕早川悠里| 三级网站在线播放| 亚洲人成欧美中文字幕| 91大神在线观看线路一区| 亚洲视频在线二区| 免费在线观看一区二区三区| 成都免费高清电影| 欧美视频在线观看一区| 99草在线视频| 久久久久久久久电影| 高潮久久久久久久久久久久久久 | 91插插插插插插| 精品国产伦一区二区三区免费 | 永久免费看mv网站入口78| 欧美午夜影院一区| 菠萝菠萝蜜在线视频免费观看| 97超级碰碰| 久久久久久黄| 亚洲 欧美 国产 另类| 精品国产1区2区3区| 午夜无码国产理论在线| 欧美 国产 精品| 久久在线免费观看| 97免费观看视频| 97在线观看免费| 欧美国产偷国产精品三区| 国模无码视频一区| 欧美性大战久久久久久久| 色老头在线观看| 欧美亚洲另类久久综合| 国产一区二区三区免费| 欧美国产成人精品一区二区三区| www.日韩免费| 精品在线观看入口| 好吊操视频这里只有精品| 在线看国产一区| 啊啊啊久久久| 不卡中文字幕在线| 久久精品视频一区二区| 精品人妻午夜一区二区三区四区|