日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LwIP之动态内存池

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LwIP之动态内存池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看memp_t,這是一個枚舉體,定義了所有內存池的類型。

typedef enum { #define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, #include "lwip/memp_std.h"MEMP_MAX } memp_t;

枚舉體包含了一個頭文件,對頭文件進行展開

typedef enum { #define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name,......#if LWIP_RAW LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB") #endif#if LWIP_UDP LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB") #endif#if LWIP_TCP LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB") LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG") #endif......#undef LWIP_MEMPOOL......MEMP_MAX } memp_t;

進一步,對宏LWIP_MEMPOOL進行展開,最終得到memp_t類型如下

typedef enum {MEMP_RAW_PCB,MEMP_UDP_PCB,MEMP_TCP_PCB,MEMP_TCP_PCB_LISTEN,MEMP_TCP_SEG,......MEMP_MAX } memp_t;

按照上面的原理,編譯的時候,會建立起來幾個全局變量

/* 各個內存池單元大小 */ const u16_t memp_sizes[MEMP_MAX] = { #define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEM_ALIGN_SIZE(size), #include "lwip/memp_std.h" }; 展開后 const u16_t memp_sizes[MEMP_MAX] = {LWIP_MEM_ALIGN_SIZE(sizeof(struct raw_pcb)),LWIP_MEM_ALIGN_SIZE(sizeof(struct udp_pcb)),LWIP_MEM_ALIGN_SIZE(sizeof(struct tcp_pcb)),LWIP_MEM_ALIGN_SIZE(sizeof(struct tcp_pcb_listen)),LWIP_MEM_ALIGN_SIZE(sizeof(struct tcp_seg)),... }; /* 各個內存池單元個數數組 */ static const u16_t memp_num[MEMP_MAX] = { #define LWIP_MEMPOOL(name,num,size,desc) (num), #include "lwip/memp_std.h" }; 展開后 static const u16_t memp_num[MEMP_MAX] = {MEMP_NUM_RAW_PCB,MEMP_NUM_UDP_PCB,MEMP_NUM_TCP_PCB,MEMP_NUM_TCP_PCB_LISTEN,MEMP_NUM_TCP_SEG,... }; /* 所有內存池空間 */ static u8_t memp_memory[MEM_ALIGNMENT - 1 #define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) #include "lwip/memp_std.h" ]; 展開后 static u8_t memp_memory[MEM_ALIGNMENT - 1 + (MEMP_NUM_RAW_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct raw_pcb)))+ (MEMP_NUM_UDP_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct udp_pcb)))+ (MEMP_NUM_TCP_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct tcp_pcb)))+ (MEMP_NUM_TCP_PCB_LISTEN) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct tcp_pcb_listen)))+ (MEMP_NUM_TCP_SEG) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct tcp_seg))) ];

接下來再看一個結構體,這個結構體用于將內存池單元連接成鏈表

/* 內存池單元結構體 */ struct memp {struct memp *next; };

而下面這個數組用于指向各個內存池鏈表中的第一個空閑單元

static struct memp *memp_tab[MEMP_MAX];

?

接下來看一下內存池相關的API

/* 初始化內存池 */ void memp_init(void) {struct memp *memp;u16_t i, j;/* 內存池所在內存地址 */memp = LWIP_MEM_ALIGN(memp_memory);/* 將內存分割成各個內存池 */for (i = 0; i < MEMP_MAX; ++i) {/* 將各個內存池單元連接成鏈表 */memp_tab[i] = NULL;for (j = 0; j < memp_num[i]; ++j) {memp->next = memp_tab[i];memp_tab[i] = memp;memp = (struct memp *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i]);}} }

初始化完成之后,內存池空間被組織成如下結構?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

/* 申請一個內存池單元 */ void *memp_malloc(memp_t type) {struct memp *memp;/* 內存池空閑單元指針 */memp = memp_tab[type];/* 鏈表頭部取出一個單元 */if (memp != NULL) {memp_tab[type] = memp->next;memp = (struct memp *)((u8_t *)memp + MEMP_SIZE);}/* 返回內存地址 */return memp; } /* 釋放一個內存池單元 */ void memp_free(memp_t type, void *mem) {struct memp *memp;if (mem == NULL) {return;}/* 將內存地址轉換為內存池單元指針 */memp = (struct memp *)((u8_t*)mem - MEMP_SIZE);/* 將內存池單元插入相應鏈表頭部 */memp->next = memp_tab[type]; memp_tab[type] = memp; }

?

總結

以上是生活随笔為你收集整理的LwIP之动态内存池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男女互插视频 | sm乳奴虐乳调教bdsm | 天天舔天天插 | 久久国产柳州莫菁门 | 久久99热久久99精品 | 99er热精品视频 | 国产原创av在线 | 玩偶游戏在线观看免费 | 黄色综合网站 | 李丽珍裸体午夜理伦片 | 在线xxxx| 久久久精品国产sm调教网站 | 免费毛片一级 | 亚洲精品久久久久中文字幕二区 | 亚日韩欧美| 国产特黄一级片 | 中文字幕亚洲乱码熟女1区2区 | 亚洲欧美在线看 | 日日噜噜噜夜夜爽爽狠狠 | 日韩麻豆视频 | 欧美国产日韩视频 | 日韩欧美国产一区二区 | 欧美八区| 青青艹在线观看 | 亚洲一区二区日韩 | 91视频免费在线 | 欧美综合专区 | 亚洲黄色免费在线观看 | 中国美女黄色 | 国精品一区二区 | 久久久久久久穴 | 国产精品88| av影片在线播放 | 岛国精品在线播放 | 日韩淫片| 秋葵视频在线 | 天天干天天爱天天射 | 欧美午夜精品久久久久久人妖 | 一级性视频 | 欧美gv在线观看 | 国产成人精品免费在线观看 | 精品国产制服丝袜高跟 | 97视频一区二区 | 亚洲综合免费观看高清完整版 | 91精品国产99 | av操操| 美国黄色片网站 | 99久久久无码国产精品免费蜜柚 | 六月综合激情 | 黄色一级欧美 | 污在线观看 | 欧美老女人xx | 亚洲国产精品麻豆 | 亚洲成人免费影院 | 亚洲综合五月天婷婷丁香 | 亚洲视频一区二区三区在线观看 | 欧美疯狂做受xxxxx高潮 | 国产深夜福利在线 | 欧美精品一区二区三区视频 | 久久精品一区二区三区四区 | 不卡影院 | 久久久久久久网 | 国产伦精品一区二区三区视频黑人 | 久久精品视频在线播放 | 二区三区在线观看 | 波多野结衣av片 | 久久久啊啊啊 | 五月婷婷欧美 | 乱lun合集小可的奶水 | av一级在线| 制服丝袜在线播放 | 丰满人妻一区二区三区免费视频 | 亚洲视频免费在线 | 欧美男女啪啪 | 色偷偷中文字幕 | 亚洲区中文字幕 | 色视频在线免费观看 | 亚洲免费视 | 谁有免费的黄色网址 | 奇米777色 | 97色干| 亚洲黄色av| 国产亚洲精品女人久久久久久 | 欧美大片一级 | 亚洲女同视频 | 日韩精品――中文字幕 | 韩日视频在线观看 | 内射后入在线观看一区 | 中国黄色一级视频 | 日日日干| 精品久久一二三区 | 亚洲午夜久久久久久久久久久 | 波多野结衣女同 | 不卡视频一区二区三区 | 一区二区手机在线 | 色综合色婷婷 | 国产福利视频在线观看 | 她也啪在线视频 | 不卡av免费在线观看 |