日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LwIP 之六 详解动态内存管理 内存池(memp.c/h)

發布時間:2024/10/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LwIP 之六 详解动态内存管理 内存池(memp.c/h) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??該文主要是接上一部分LwIP 之 詳解動態內存管理 內存堆(mem.c/h),該部分許多內容需要用到上一篇的內容。該部分主要是詳細介紹LwIP中的動態內存池。整個內存池的實現相較于內存堆來說,還是麻煩點的。光是看源碼中那一堆宏定義就夠費勁!此外還有一點就是,該部分的文件結構也是挺有意思的,主要就是對于宏各種巧妙運用!
??LwIP的內存池實現對應的源碼文件主要就是memp.c/h。除此之外,還有兩個頭文件memp_prive.h和memp_std.h。
之前也說過,LwIP內存池的實現受制于兩個宏值MEMP_MEM_MALLOC和MEM_USE_POOLS的限制。在該部分的源碼文件中,仍然到處可見這兩個宏值。

memp_std.h

??該文件主要定義了LwIP內部的內存池,此外還通過#include "lwippools.h"的形式,將用戶自定義的內存池包含進來。其為LwIP內部使用的文件,外部應用程序不應該使用該文件。這個文件被故意包含多次,一次使用LWIP_MEMPOOL()的空定義來處理所有include,后續多次包含用來構建各種mem池列表。
??該文件比較有意思,其中的宏值定義全部依賴于宏LWIP_MEMPOOL(name,num,size,desc),這樣,只要外部提供的該宏值不同,則包含該文件后的源文件(通常為memp.h或memp_priv.h)在預處理后,就會產生不一樣的結果。這樣,就可以通過在不同的地方多次包含該文件(前面必定提供宏值MEMPOOL)以產生不同結果!下面來詳細分析一下該文件。
??該文件的第一部分其實就是定義了三個宏值(第一個由memp.h或memp_priv.h提供),這三個宏值也就對應了LwIP所定義的三種內存池:

  • MEMPOOL: 標準內存池(這個宏通常來自別的文件memp.h或memp_priv.h,通過包含該文件形式定義對應的東西)
  • MALLOC_MEMPOOL: 提供給mem.c中的mem_malloc使用的內存池。前面說過,LwIP的內存堆可以用內存池來實現(依賴于MEMPOOL)。
  • PBUF_MEMPOOL: LwIP的pbuf結構使用的內存池(依賴于MEMPOOL)。pbuf再后面介紹!

上面的宏值為簡寫,沒寫參數部分。后面就是使用以上三個宏值,來定義不同的內存池!
??該文件的第二部分部分就是定義上面定義的宏值,來具體定義各種LwIP內部使用的內存池。其他文件(memp.h或memp_priv.h)包含該文件的地方,通過提供不同的MEMPOOL,該部分將產生不同的結果。其中有個地方需要注意一下:

#if MEMP_USE_CUSTOM_POOLS #include "lwippools.h" #endif /* MEMP_USE_CUSTOM_POOLS */

通過以上代碼,將用戶自己定義的內存池引入進來。同時也不難看出,如果用戶配置了使用內存池,就必須要定義文件lwippools.h,,并且將自己需要定義的內存池放到該文件中。
??最后,將所有宏值進行反定義,這樣就可以保證多次包含時,不會出現宏的重復定義!

memp_prive.h

??該文件定義了內存池的基本結構等,同樣為LwIP內部使用的文件,外部應用程序不應該使用該文件。且該文件需要使用memp.h中定義枚舉值。因此,這個文件的使用位置比較特殊,如下圖

重點注意上圖中,高亮部分的注釋。下面詳細分析以下該文件。
??該文件的第一部分為MEMP_OVERFLOW_CHECK,其主要用來進行內存池的溢出檢查,這里不多做說明。
??接下來的第二大部分就是內存池各種結構的定義。首先第一個結構如下:

#if !MEMP_MEM_MALLOC || MEMP_OVERFLOW_CHECK struct memp {struct memp *next; /* 下一個鏈表 */ #if MEMP_OVERFLOW_CHECKconst char *file; /* 發生溢出時調用函數的文件名,mem_malloc調用者的文件 */int line; /* 發生溢出時調用函數的行號,mem_malloc調用者的行數 */ #endif /* MEMP_OVERFLOW_CHECK */ }; #endif /* !MEMP_MEM_MALLOC || MEMP_OVERFLOW_CHECK */

LwIP的內存池是通過鏈表來組織的。上面的結構就是鏈表的節點結構了!
??接下來是一個比較復雜的枚舉變量的定義。其實,這里面就定義了兩個枚舉變量MEMP_POOL_HELPER_START 和 MEMP_POOL_HELPER_END,后面的一堆東西就是給這兩個枚舉變量賦初值的。這其中就需要memp.h中定義的枚舉變量memp_t中的值。

#if MEM_USE_POOLS && MEMP_USE_CUSTOM_POOLS /* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ typedef enum {/* Get the first (via:MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/MEMP_POOL_HELPER_FIRST = ((u8_t) #define LWIP_MEMPOOL(name,num,size,desc) #define LWIP_MALLOC_MEMPOOL_START 1 #define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 #define LWIP_MALLOC_MEMPOOL_END #include "lwip/priv/memp_std.h") ,/* Get the last (via:MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */MEMP_POOL_HELPER_LAST = ((u8_t) #define LWIP_MEMPOOL(name,num,size,desc) #define LWIP_MALLOC_MEMPOOL_START #define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * #define LWIP_MALLOC_MEMPOOL_END 1 #include "lwip/priv/memp_std.h") } memp_pool_helper_t;

首先說一下這個枚舉變量是干啥的!之前曾經說過,LwIP的內存堆可以使用內存池來實現。那么為了實現該部分,內存池這里必須要提供必要的結構、接口來供內存堆實現時調用。其中,這個枚舉結構就是定義出了內存池枚舉memp_t中的用戶定義的供內存堆使用的內存池的枚舉界限!將這個枚舉各部分展開后,就是如下

#if MEM_USE_POOLS && MEMP_USE_CUSTOM_POOLS /* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ typedef enum {/* Get the first (via:MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)“MEMP_POOL_##size” 這個東西,就是之前定義的枚舉memp_t中 ,用戶自定義的內存池的枚舉值,結果一步步替換后就成該名*/MEMP_POOL_HELPER_FIRST = ((u8_t) #define LWIP_MEMPOOL(name,num,size,desc) #define LWIP_MALLOC_MEMPOOL_START 1 #define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 #define LWIP_MALLOC_MEMPOOL_END// #if MEMP_USE_CUSTOM_POOLS // #include "lwippools.h" // #endif /* MEMP_USE_CUSTOM_POOLS */ // /* 這里將其展開之后就是如下 */ LWIP_MALLOC_MEMPOOL_START LWIP_MALLOC_MEMPOOL(20, 256) -> MEMP_POOL_256 LWIP_MALLOC_MEMPOOL(10, 512) -> MEMP_POOL_512 LWIP_MALLOC_MEMPOOL(5, 1512) -> MEMP_POOL_1512 LWIP_MALLOC_MEMPOOL_END#undef LWIP_MEMPOOL #undef LWIP_MALLOC_MEMPOOL #undef LWIP_MALLOC_MEMPOOL_START #undef LWIP_MALLOC_MEMPOOL_END #undef LWIP_PBUF_MEMPOOL) , /*最終 MEMP_POOL_HELPER_START = 1*MEMP_POOL_256+0*MEMP_POOL_512+0*MEMP_POOL_1512 = MEMP_POOL_256*//* Get the last (via:MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) 結束值展開和上面一樣不再說明 */MEMP_POOL_HELPER_LAST = ((u8_t) #define LWIP_MEMPOOL(name,num,size,desc) #define LWIP_MALLOC_MEMPOOL_START #define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * #define LWIP_MALLOC_MEMPOOL_END 1 #include "lwip/priv/memp_std.h")/* 最終 MEMP_POOL_HELPER_LAST = 0 + MEMP_POOL_256 * 0 + MEMP_POOL_512 * 0 + MEMP_POOL_1512 * 1 = MEMP_POOL_1512 */ } memp_pool_helper_t;

最終,宏MEMP_POOL_HELPER_FIRST = MEMP_POOL_256,而宏MEMP_POOL_HELPER_LAST = MEMP_POOL_1512。
??在接下來就是內存池描述符的結構定義了,在LwIP1.4.1版本中,以下各部分都是獨立的,最新版中將其統一成了一個結構體。具體如下:

/** Memory pool descriptor */ struct memp_desc { #if defined(LWIP_DEBUG) || MEMP_OVERFLOW_CHECK || LWIP_STATS_DISPLAY/** Textual description */const char *desc; #endif /* LWIP_DEBUG || MEMP_OVERFLOW_CHECK || LWIP_STATS_DISPLAY */ #if MEMP_STATS/** Statistics */struct stats_mem *stats; #endif/** Element size */u16_t size; #if !MEMP_MEM_MALLOC/** Number of elements */u16_t num;/** Base address */u8_t *base;/** First free element of each pool. Elements form a linked list. */struct memp **tab; #endif /* MEMP_MEM_MALLOC */ };

??該文件的最后一部分就是個接口的定義了,其實現均在memp.c文件中,后面會詳細的說明。

memp.h

??該文件主要就是定義以下內存池使用的宏,結構等,其中部分結構放在了memp_priv.h文件中,如果之前看過LwIP1.4.1的源碼就會知道,原來是沒有memp_priv.h文件的,所有結構都在memp.h中,最新的源碼進行結構調整。文件開始就是如下:

/* run once with empty definition to handle all custom includes in lwippools.h*/ #define LWIP_MEMPOOL(name,num,size,desc) /* 這個宏為空 */ #include "lwip/priv/memp_std.h" /* 其中的定義均是基于上面宏值得,也就成了空 */

結合memp_std.h不難發現,將各宏展開后其實就剩下兩句:

#if MEMP_USE_CUSTOM_POOLS #include "lwippools.h" #endif

其實,再將上面展開后,里面定義的內存池也是無效的,如果文件lwippools.h中有引入其他文件或結構是,這幾句唯一的作用就是將用戶自定義的內存池時,用到的各種東西引入進來。否則以上就會全部為空,啥也不剩!
??接下來是如下幾句,這個枚舉就是列出LwIP中定義的各種內存池的對應的枚舉值。

typedef enum { #define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, /* ## 為連接符 且會忽略##前后的空格, 例如:a ## b 其實就是 ab */ #include "lwip/priv/memp_std.h"MEMP_MAX } memp_t;

這個用來為每個定義的內存池定義一個枚舉變量值。memp_std.h中通過使用宏值#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name,來定義各種枚舉值,簡單將宏值展開后,就是如下

typedef enum {/** A list of internal pools used by LWIP.** LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description)* creates a pool name MEMP_pool_name. description is used in stats.c*/ #if LWIP_RAWMEMP_RAW_PCB, #endif /* LWIP_RAW */#if LWIP_UDPMEMP_UDP_PCB, #endif /* LWIP_UDP */#if LWIP_TCPMEMP_TCP_PCB,MEMP_TCP_PCB_LISTEN,MEMP_TCP_SEG, #endif /* LWIP_TCP */#if LWIP_IPV4 && IP_REASSEMBLYMEMP_REASSDATA, #endif /* LWIP_IPV4 && IP_REASSEMBLY */ #if (IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG)MEMP_FRAG_PBUF, #endif /* IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF || (LWIP_IPV6 && LWIP_IPV6_FRAG) */#if LWIP_NETCONN || LWIP_SOCKETMEMP_NETBUF,MEMP_NETCONN, #endif /* LWIP_NETCONN || LWIP_SOCKET */#if NO_SYS==0MEMP_TCPIP_MSG_API, #if LWIP_MPU_COMPATIBLEMEMP_API_MSG, #if LWIP_DNSMEMP_DNS_API_MSG, #endif #if LWIP_SOCKET && !LWIP_TCPIP_CORE_LOCKINGMEMP_SOCKET_SETGETSOCKOPT_DATA, #endif #if LWIP_NETIF_APIMEMP_NETIFAPI_MSG, #endif #endif /* LWIP_MPU_COMPATIBLE */ #if !LWIP_TCPIP_CORE_LOCKING_INPUTMEMP_TCPIP_MSG_INPKT, #endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ #endif /* NO_SYS==0 */#if LWIP_IPV4 && LWIP_ARP && ARP_QUEUEINGMEMP_ARP_QUEUE, #endif /* LWIP_IPV4 && LWIP_ARP && ARP_QUEUEING */#if LWIP_IGMPMEMP_IGMP_GROUP, #endif /* LWIP_IGMP */#if LWIP_TIMERS && !LWIP_TIMERS_CUSTOMMEMP_SYS_TIMEOUT, #endif /* LWIP_TIMERS && !LWIP_TIMERS_CUSTOM */#if LWIP_DNS && LWIP_SOCKETMEMP_NETDB, #endif /* LWIP_DNS && LWIP_SOCKET */ #if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMICMEMP_LOCALHOSTLIST, #endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */#if LWIP_IPV6 && LWIP_ND6_QUEUEINGMEMP_ND6_QUEUE, #endif /* LWIP_IPV6 && LWIP_ND6_QUEUEING */#if LWIP_IPV6 && LWIP_IPV6_REASSMEMP_IP6_REASSDATA, #endif /* LWIP_IPV6 && LWIP_IPV6_REASS */#if LWIP_IPV6 && LWIP_IPV6_MLDMEMP_MLD6_GROUP, #endif /* LWIP_IPV6 && LWIP_IPV6_MLD *//** A list of pools of pbuf's used by LWIP.** LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description)* creates a pool name MEMP_pool_name. description is used in stats.c* This allocates enough space for the pbuf struct and a payload.* (Example: pbuf_payload_size=0 allocates only size for the struct)*/MEMP_PBUF,MEMP_PBUF_POOL,/** Allow for user-defined pools; this must be explicitly set in lwipopts.h* since the default is to NOT look for lwippools.h*/ // #if MEMP_USE_CUSTOM_POOLS // #include "lwippools.h" // /* 這里將其展開之后就是如下 */ // LWIP_MALLOC_MEMPOOL_START // LWIP_MALLOC_MEMPOOL(20, 256) -> MEMP_POOL_256 // LWIP_MALLOC_MEMPOOL(10, 512) -> MEMP_POOL_512 // LWIP_MALLOC_MEMPOOL(5, 1512) -> MEMP_POOL_1512 // LWIP_MALLOC_MEMPOOL_END // #endif /* MEMP_USE_CUSTOM_POOLS */ MEMP_POOL_256, MEMP_POOL_512, MEMP_POOL_1512,MEMP_MAX } memp_t;

接下來,就是#include "lwip/priv/memp_priv.h" ,這個文件的引用必須放在這里,因為其內部會使用上面的枚舉值(memp_t)。繼續是一些宏定義,其中比較重要的就是LWIP_MEMPOOL_DECLARE(name,num,size,desc),這個宏最終用來定義出各內存池!而這其中,根據用戶配置的宏值MEMP_MEM_MALLOC和MEM_USE_POOLS的不同,會有不同的定義。其中前者方式下比較簡單、后者則相對來說復雜一些!

??該文件的最后一部分就是個接口的定義了,其實現均在memp.c文件中,后面會詳細的說明。

memp.c

??該文件主要就針對上面各種定義的具體實現了,整個文件代碼并沒多少行,看起來還是比較簡單的。比較麻煩的就是上面對于宏函數的巧妙運用上。文件開頭是如下結構

#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc) #include "lwip/priv/memp_std.h" /* 全局型指針數組,指向每類POOL的描述符 */ const struct memp_desc* const memp_pools[MEMP_MAX] = { #define LWIP_MEMPOOL(name,num,size,desc) &memp_ ## name, #include "lwip/priv/memp_std.h" };

這里就是定義所有內存池了。看起來非常簡單,但是真正展開各宏值才是比較麻煩的!再接下來就是具體的實現函數了,下面就以源碼注釋的形式進行說明(注意對于其中的調試用的函數或者安全性函數不進行說明)。

/*** Initialize custom memory pool.* Related functions: memp_malloc_pool, memp_free_pool** @param desc pool to initialize*/ void memp_init_pool(const struct memp_desc *desc) { #if MEMP_MEM_MALLOCLWIP_UNUSED_ARG(desc); #elseint i;struct memp *memp;*desc->tab = NULL;memp = (struct memp*)LWIP_MEM_ALIGN(desc->base); /* 將內存池起始空間進行對齊,這個宏在上一篇文章中有詳細介紹 *//* create a linked list of memp elements */for (i = 0; i < desc->num; ++i) { /* 將該類所有POOL組成鏈表的形式 */memp->next = *desc->tab;*desc->tab = memp; #if MEMP_OVERFLOW_CHECKmemp_overflow_init_element(memp, desc); #endif /* MEMP_OVERFLOW_CHECK *//* cast through void* to get rid of alignment warnings */memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + desc->size #if MEMP_OVERFLOW_CHECK+ MEMP_SANITY_REGION_AFTER_ALIGNED #endif);} #if MEMP_STATSdesc->stats->avail = desc->num; #endif /* MEMP_STATS */ #endif /* !MEMP_MEM_MALLOC */#if MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY)desc->stats->name = desc->desc; #endif /* MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY) */ }/*** Initializes lwIP built-in pools.* Related functions: memp_malloc, memp_free** Carves out memp_memory into linked lists for each pool-type.*/ void memp_init(void) {u16_t i;/* 對每個定義的內存池進行初始化 */for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) {memp_init_pool(memp_pools[i]); /* 初始化是根據文件開頭定義的內存池描述符(memp_pools數組)表進行的 */#if LWIP_STATS && MEMP_STATSlwip_stats.memp[i] = memp_pools[i]->stats; #endif}#if MEMP_OVERFLOW_CHECK >= 2/* check everything a first time to see if it worked */memp_overflow_check_all(); #endif /* MEMP_OVERFLOW_CHECK >= 2 */ }static void* #if !MEMP_OVERFLOW_CHECK do_memp_malloc_pool(const struct memp_desc *desc) #else do_memp_malloc_pool_fn(const struct memp_desc *desc, const char* file, const int line) #endif {struct memp *memp;SYS_ARCH_DECL_PROTECT(old_level);/* 臨界保護區 */#if MEMP_MEM_MALLOCmemp = (struct memp *)mem_malloc(MEMP_SIZE + MEMP_ALIGN_SIZE(desc->size));SYS_ARCH_PROTECT(old_level); #else /* MEMP_MEM_MALLOC */SYS_ARCH_PROTECT(old_level);/* 進入臨界區 */memp = *desc->tab; #endif /* MEMP_MEM_MALLOC */if (memp != NULL) { #if !MEMP_MEM_MALLOC #if MEMP_OVERFLOW_CHECK == 1memp_overflow_check_element_overflow(memp, desc);memp_overflow_check_element_underflow(memp, desc); #endif /* MEMP_OVERFLOW_CHECK */*desc->tab = memp->next; #if MEMP_OVERFLOW_CHECKmemp->next = NULL; #endif /* MEMP_OVERFLOW_CHECK */ #endif /* !MEMP_MEM_MALLOC */ #if MEMP_OVERFLOW_CHECKmemp->file = file;memp->line = line; #if MEMP_MEM_MALLOCmemp_overflow_init_element(memp, desc); #endif /* MEMP_MEM_MALLOC */ #endif /* MEMP_OVERFLOW_CHECK */LWIP_ASSERT("memp_malloc: memp properly aligned",((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); #if MEMP_STATSdesc->stats->used++;if (desc->stats->used > desc->stats->max) {desc->stats->max = desc->stats->used;} #endifSYS_ARCH_UNPROTECT(old_level);/* cast through u8_t* to get rid of alignment warnings */return ((u8_t*)memp + MEMP_SIZE);} else {LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", desc->desc)); #if MEMP_STATSdesc->stats->err++; #endif}SYS_ARCH_UNPROTECT(old_level);/* 退出臨界區 */return NULL; }/*** Get an element from a custom pool.** @param desc the pool to get an element from** @return a pointer to the allocated memory or a NULL pointer on error*/ void * #if !MEMP_OVERFLOW_CHECK memp_malloc_pool(const struct memp_desc *desc) #else memp_malloc_pool_fn(const struct memp_desc *desc, const char* file, const int line) #endif {LWIP_ASSERT("invalid pool desc", desc != NULL);if (desc == NULL) {return NULL;}#if !MEMP_OVERFLOW_CHECKreturn do_memp_malloc_pool(desc); #elsereturn do_memp_malloc_pool_fn(desc, file, line); #endif }/*** Get an element from a specific pool.** @param type the pool to get an element from** @return a pointer to the allocated memory or a NULL pointer on error*//* 分配過程是如果memp_tab[]數組中相應鏈表的指針為空,說明該類型的POOL已經沒有了,分配失敗;否則選擇鏈表中的第一個POOL,并在POOL最開始處預留出MEMP_SIZE(這里為0)的空間,最后將有效地址返回給函數調用者。*/ void * #if !MEMP_OVERFLOW_CHECK memp_malloc(memp_t type) #else memp_malloc_fn(memp_t type, const char* file, const int line) #endif {void *memp;LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;);#if MEMP_OVERFLOW_CHECK >= 2memp_overflow_check_all(); #endif /* MEMP_OVERFLOW_CHECK >= 2 */#if !MEMP_OVERFLOW_CHECKmemp = do_memp_malloc_pool(memp_pools[type]); #elsememp = do_memp_malloc_pool_fn(memp_pools[type], file, line); #endifreturn memp; }static void do_memp_free_pool(const struct memp_desc* desc, void *mem) {struct memp *memp;SYS_ARCH_DECL_PROTECT(old_level);LWIP_ASSERT("memp_free: mem properly aligned",((mem_ptr_t)mem % MEM_ALIGNMENT) == 0);/* cast through void* to get rid of alignment warnings */memp = (struct memp *)(void *)((u8_t*)mem - MEMP_SIZE);SYS_ARCH_PROTECT(old_level); /* 進入臨界區 */#if MEMP_OVERFLOW_CHECK == 1memp_overflow_check_element_overflow(memp, desc);memp_overflow_check_element_underflow(memp, desc); #endif /* MEMP_OVERFLOW_CHECK */#if MEMP_STATSdesc->stats->used--; #endif#if MEMP_MEM_MALLOCLWIP_UNUSED_ARG(desc);SYS_ARCH_UNPROTECT(old_level);mem_free(memp); #else /* MEMP_MEM_MALLOC */memp->next = *desc->tab;*desc->tab = memp;#if MEMP_SANITY_CHECKLWIP_ASSERT("memp sanity", memp_sanity(desc)); #endif /* MEMP_SANITY_CHECK */SYS_ARCH_UNPROTECT(old_level); /* 退出臨界區 */ #endif /* !MEMP_MEM_MALLOC */ }/*** Put a custom pool element back into its pool.** @param desc the pool where to put mem* @param mem the memp element to free*/ void memp_free_pool(const struct memp_desc* desc, void *mem) {LWIP_ASSERT("invalid pool desc", desc != NULL);if ((desc == NULL) || (mem == NULL)) {return;}do_memp_free_pool(desc, mem); }/*** Put an element back into its pool.** @param type the pool where to put mem* @param mem the memp element to free*//* 內存池釋放 */ void memp_free(memp_t type, void *mem) { #ifdef LWIP_HOOK_MEMP_AVAILABLEstruct memp *old_first; #endifLWIP_ERROR("memp_free: type < MEMP_MAX", (type < MEMP_MAX), return;);if (mem == NULL) {return;}#if MEMP_OVERFLOW_CHECK >= 2memp_overflow_check_all(); #endif /* MEMP_OVERFLOW_CHECK >= 2 */#ifdef LWIP_HOOK_MEMP_AVAILABLEold_first = *memp_pools[type]->tab; #endifdo_memp_free_pool(memp_pools[type], mem);#ifdef LWIP_HOOK_MEMP_AVAILABLEif (old_first == NULL) {LWIP_HOOK_MEMP_AVAILABLE(type);} #endif }

還有好多解釋沒完善的地方,后續用到在整理。。

總結

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

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

美女很黄免费网站 | 日韩午夜一级片 | 六月丁香在线视频 | 中文字幕在线播放视频 | 久久观看免费视频 | 五月天com | 免费看污网站 | 爱干视频 | 久久国产精品视频免费看 | 免费看的国产视频网站 | 精品黄色片 | 国产精品一码二码三码在线 | 国产精品久久久久久久久久久久午夜 | 日韩乱码中文字幕 | 日韩中文字幕第一页 | www.夜色321.com| 又黄又爽的视频在线观看网站 | 婷婷深爱网 | 在线看片91 | 天天射日 | 欧美精品久久久久久久久久丰满 | 99人成在线观看视频 | 蜜桃视频在线观看一区 | 中文字幕中文字幕中文字幕 | 日韩免费高清在线观看 | 青青草国产成人99久久 | 中文字幕日韩伦理 | 人人狠| 综合网天天| 黄色日视频 | 久久夜色精品国产欧美一区麻豆 | av888av.com| 男女啪啪网站 | 色综合天天色综合 | 精品国内自产拍在线观看视频 | 啪嗒啪嗒免费观看完整版 | 日韩在线 一区二区 | 国产在线a不卡 | 97超碰在线视 | 日韩免费小视频 | av成人动漫 | 黄色精品国产 | 视频在线观看入口黄最新永久免费国产 | 国产精品18毛片一区二区 | 福利二区视频 | 久久国产91| 亚洲日日日 | 国产精品资源 | 日韩免费在线看 | 五月天精品视频 | 日韩最新在线视频 | 五月天六月丁香 | 国产最新在线视频 | 久久999精品 | 久久久久久免费 | 一级欧美一级日韩 | 国产99视频在线观看 | 午夜精品区 | 97视频在线观看成人 | 国产精品女同一区二区三区久久夜 | 国产午夜麻豆影院在线观看 | 天天天在线综合网 | 免费日p视频| 麻豆免费视频网站 | 97热视频 | 国产一级视频在线免费观看 | 97成人在线视频 | 国产视频一区在线 | 一本一道久久a久久精品蜜桃 | 久久午夜国产 | 亚洲男男gaygay无套 | 天天射天天色天天干 | 久久夜视频 | 国产中文字幕大全 | av蜜桃在线 | 日韩精品91偷拍在线观看 | 91精品黄色 | 超碰在线人人草 | 最新高清无码专区 | 欧美久久久久久久久久久久 | av丝袜在线 | 黄色片视频在线观看 | 国产视频中文字幕在线观看 | 亚洲国产成人精品在线 | 久久精品视频在线观看 | 五月天中文字幕mv在线 | 综合铜03 | 在线播放日韩 | 日韩欧美在线观看 | 国产精品日韩在线 | 丁香久久婷婷 | 99久久夜色精品国产亚洲96 | 99久久久国产精品美女 | av电影在线免费观看 | 午夜天使 | 欧美精品亚洲精品日韩精品 | 久久午夜鲁丝片 | 成人黄色片在线播放 | 少妇av片| 国产xxxx性hd极品 | 五月婷在线视频 | 日韩| 国产视频导航 | 亚洲成av人片在线观看www | 香蕉视频在线观看免费 | 久久久久久久久免费 | 一本一本久久a久久精品综合 | 国产美女在线观看 | 高清不卡毛片 | 日韩精品视频免费在线观看 | 香蕉视频国产在线观看 | 日韩一区正在播放 | 中文字幕日韩一区二区三区不卡 | 精品在线观 | 免费看日韩| 东方av在线免费观看 | av在线电影网站 | 亚洲综合欧美日韩狠狠色 | 亚洲国内在线 | 伊人电影天堂 | 免费看污网站 | 国产一区二区三区午夜 | 久久亚洲免费 | 麻豆91在线看 | 国产精品网站 | 成人免费视频网站在线观看 | 久草成人在线 | 午夜电影av | 日韩最新在线视频 | 国产精品久久久久久久久久久免费 | 亚洲乱码久久久 | 91最新中文字幕 | 91精品久久久久久久久久久久久 | 成人一区二区三区中文字幕 | 久久一区二区三区超碰国产精品 | 日日夜色 | 国产成人一区二区三区在线观看 | 国产丝袜在线 | 97激情影院 | 欧美另类视频 | 西西人体4444www高清视频 | 国产精品久久久久久久久久久杏吧 | www.com操| av中文天堂 | 免费av电影网站 | 国产一二三四在线观看视频 | 免费视频网 | 成年人在线免费看片 | 亚洲欧美国产精品va在线观看 | 丁香av在线| 久久久久国产一区二区三区 | 九九免费在线观看视频 | 国产日产精品久久久久快鸭 | 人人射人人澡 | 亚洲激精日韩激精欧美精品 | 欧美网址在线观看 | 国产精品久久影院 | av资源在线看 | 国产色一区 | 欧美日韩视频观看 | 欧美污在线观看 | 国产亚洲精品久久久久久无几年桃 | 很黄很黄的网站免费的 | 国产精品无av码在线观看 | 不卡在线一区 | 国产日韩高清在线 | 久久久久久久久久久高潮一区二区 | 国产一线在线 | 欧美日韩精品在线一区二区 | 2024国产精品视频 | 波多野结衣久久精品 | 人人揉人人揉人人揉人人揉97 | 久久99国产精品久久 | 国产精品入口66mio女同 | 成人在线免费看 | 婷婷久久一区 | 五月婷婷久久丁香 | 永久免费精品视频网站 | 午夜在线观看影院 | 国产精品久久久久久久久久三级 | www.在线观看av | 在线天堂8√ | 天天天天天天天操 | 亚洲高清精品在线 | 婷婷综合激情 | 一级性生活片 | 国产高清视频免费在线观看 | 久久国产网 | 久久五月情影视 | 欧美日韩一区二区三区视频 | 国产一卡久久电影永久 | 日本精品久久久久 | 97免费在线观看 | 国产一级免费在线观看 | 一区二区三区精品久久久 | 一区二区三区电影在线播 | www.97色.com | 婷婷在线看 | 热久久国产 | 97视频在线观看成人 | 在线视频日韩 | 国产成人精品aaa | 中文字幕在线观看第一区 | 国产一级在线看 | 国产精品久久久久久久久久久久久久 | 免费看片亚洲 | 日韩字幕在线 | 成人av网站在线观看 | 免费观看午夜视频 | 爱色婷婷| 欧美精品乱码99久久影院 | 欧美日韩3p | 国内外成人在线 | 黄色软件视频网站 | 久久69精品 | 波多野结衣视频一区二区三区 | 国产女人18毛片水真多18精品 | 婷婷丁香在线 | 国产视频午夜 | 欧美日韩精品免费观看视频 | 少妇性aaaaaaaaa视频 | 国产精品久久久久久久久久白浆 | 激情网站网址 | 日本少妇高清做爰视频 | 99久久99久久精品国产片果冰 | 国产精品久久久免费看 | 狠狠操操操 | 国产69久久久 | 超碰97公开 | 日韩有码中文字幕在线 | 国产精品激情 | 亚洲久草在线视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 一区二区 不卡 | www国产亚洲精品 | 国内精品久久久久久久影视简单 | 色综合天天做天天爱 | 久草9视频 | a成人v在线 | 亚洲视频axxx | 欧美午夜精品久久久久 | 国产一区二区高清 | 中文字幕在线中文 | 精品国产视频在线观看 | 在线观看视频h | 国产乱码精品一区二区三区介绍 | 视频三区在线 | 成年人免费在线看 | 午夜久久久久久久久久影院 | 三上悠亚一区二区在线观看 | 日本女人的性生活视频 | 麻豆超碰 | 国产精品久久久久久久久久东京 | 国产在线视频一区 | 成人欧美一区二区三区在线观看 | 欧美性粗大hdvideo | 欧美精品久久天天躁 | 麻豆视频免费入口 | 免费亚洲成人 | 国内精品中文字幕 | 欧美在线91 | 韩日成人av | 中文字幕在线播放av | 日本公乱妇视频 | 欧美色图东方 | 99操视频| 亚洲视频,欧洲视频 | 国产性天天综合网 | 91精品啪在线观看国产81旧版 | 久久综合电影 | 久久精品一二三区白丝高潮 | 欧美视频在线观看免费网址 | 亚洲一级特黄 | 午夜精品999| 欧美日韩精品久久久 | 国产精品99久久久久久久久 | 视频一区二区精品 | 久久综合九色综合97_ 久久久 | 成人av电影在线播放 | av不卡免费在线观看 | 五月婷婷六月丁香激情 | 免费在线观看av的网站 | 久久免费的视频 | av.com在线| 中文在线字幕观看电影 | 男女男视频| 五月婷婷一区二区三区 | 精品视频在线视频 | av在线一级 | 国产高清在线免费视频 | 91精品国产乱码久久桃 | 色视频网站在线 | 中文字幕av全部资源www中文字幕在线观看 | 天天操天天操天天操天天操 | 午夜少妇av| 999久久| 国产亚洲精品久久久久久无几年桃 | 992tv人人网tv亚洲精品 | 色欧美综合 | 丁香六月激情 | 欧美一区,二区 | 亚洲欧美日韩一区二区三区在线观看 | 久久久久久久久网站 | 久久久久美女 | 久草在线在线 | 久久黄视频 | 中文字幕免费中文 | 99精品国产福利在线观看免费 | zzijzzij日本成熟少妇 | av成人在线观看 | 欧美三级在线播放 | 中文字幕亚洲国产 | 久久亚洲综合国产精品99麻豆的功能介绍 | 丝袜美女在线观看 | 免费观看一级特黄欧美大片 | 激情久久久久久久久久久久久久久久 | 91片黄在线观 | 久久久免费观看视频 | 玖玖视频国产 | 欧洲精品视频一区二区 | 久久久免费看视频 | 欧美国产日韩一区二区三区 | 亚洲毛片在线观看. | 久久久久成 | 精品在线视频播放 | 日韩理论电影在线观看 | 91一区啪爱嗯打偷拍欧美 | 久久久久97国产 | 国产伦精品一区二区三区四区视频 | 欧美成人va | 麻豆久久久久久久 | 色综合久久悠悠 | 中文字幕 国产专区 | 亚洲国产大片 | 黄a在线 | 日韩二级毛片 | 久久极品| 久久久久伦理电影 | 亚洲伊人婷婷 | 久久人人爽人人爽人人片 | 国产精品福利无圣光在线一区 | 五月婷婷色 | 久久久久免费电影 | 成人免费在线观看电影 | 国产精品久久久久久久午夜 | 成人午夜电影在线播放 | 精品免费观看 | 国产91精品高清一区二区三区 | 在线观看国产区 | 国产亚洲aⅴaaaaaa毛片 | 欧美精品一区二区在线播放 | 高清国产一区 | 国产精品久久久久久久久久东京 | 精品少妇一区二区三区在线 | 成 人 a v天堂 | 亚洲免费a | 人人爱爱人人 | 久久久久综合精品福利啪啪 | 久久精品美女视频网站 | 久久精品视频中文字幕 | 国产精品久久久久久久久大全 | 久久免费视频5 | 看片黄网站 | 久久久受www免费人成 | 99久久久国产免费 | 国产无限资源在线观看 | 国产精品一区二区av | 久久久久久久网 | 夜夜爱av| 在线激情电影 | 国产精品久久久av | 欧美一级片免费观看 | 亚洲精品免费在线观看视频 | av中文天堂在线 | 中文字幕在线免费观看视频 | 国产亚洲小视频 | 蜜桃av人人夜夜澡人人爽 | 亚州视频在线 | 国产精品电影一区二区 | 国内精品久久久久久久久久清纯 | 在线观看日本高清mv视频 | 国产黄色免费看 | 国产中文字幕国产 | 99精品欧美一区二区三区黑人哦 | 中文字幕之中文字幕 | 日本中文字幕在线视频 | 久久精品2| 六月丁香婷婷久久 | 九九热视频在线播放 | 97国产 | 国产精品一区在线播放 | 99久精品视频| 欧美激情精品久久久久久 | www.av中文字幕.com | 久久99这里只有精品 | 国产香蕉久久精品综合网 | 青草视频免费观看 | 日本一区二区不卡高清 | 四虎影视成人永久免费观看亚洲欧美 | 欧美日韩视频 | 国产打女人屁股调教97 | 日躁夜躁狠狠躁2001 | 中文字幕在线观看视频免费 | 少妇性bbb搡bbb爽爽爽欧美 | 在线精品亚洲一区二区 | 国产精品久久久久久99 | 国产二区av | av再线观看 | 国产成人一区二区三区 | 麻豆一区二区三区视频 | 中文字幕免费 | 高潮毛片无遮挡高清免费 | 99日精品| 人人搞人人爽 | 亚洲h色精品 | 毛片.com| 99精品免费在线观看 | 黄色一级在线免费观看 | 2021国产精品视频 | 中文字幕在线免费看 | 久草在线久 | 9999精品 | 亚洲黄色影院 | 日韩精品不卡 | 亚洲国产午夜精品 | 丁香六月婷婷开心 | 国产xxxx做受性欧美88 | 久久 一区 | 成人国产精品电影 | 久久精品视频在线看 | 亚洲综合涩| 蜜臀aⅴ国产精品久久久国产 | 久久五月天色综合 | 81精品国产乱码久久久久久 | 天堂av观看 | 久草久热 | 国产精品免费不卡 | 日韩天天干 | 国产成人专区 | 一级黄色片在线免费观看 | 91av视频在线观看 | 手机av网站 | 亚州日韩中文字幕 | 日日夜夜网站 | a黄色大片| 久草免费在线 | 91高清免费看 | 久久成人高清 | 欧美午夜精品久久久久久孕妇 | 米奇影视7777| 在线观看国产成人av片 | 99精品国产免费久久 | 日本精品视频在线 | www.夜夜爽| 日韩精品不卡在线 | 亚洲综合在线观看视频 | www.色com| 国产美女免费观看 | 人人爽人人射 | 日韩av进入 | 欧美天天干 | 色综合天天 | 九九国产视频 | 又黄又爽又刺激的视频 | 一级精品视频在线观看宜春院 | 欧美性色xo影院 | 亚洲欧洲精品一区二区精品久久久 | 97色国产| 91一区二区在线 | 成人理论在线观看 | 又黄又刺激的视频 | 免费在线91 | 午夜 在线 | 日韩av一区二区在线 | 成人精品视频久久久久 | 国产成人av一区二区三区在线观看 | 久久av中文字幕片 | 国产视频一区二区三区在线 | 成人国产网站 | 亚洲国产成人在线播放 | 午夜精品久久久 | 最近能播放的中文字幕 | 91精品一区国产高清在线gif | 国产黄网站在线观看 | 久久精品美女 | av中文字幕在线电影 | 亚洲jizzjizz日本少妇 | 日韩精品资源 | av在线网站观看 | 欧美日韩在线观看一区 | 开心丁香婷婷深爱五月 | 亚洲激情av | 色婷婷伊人 | 国产精品亚洲片在线播放 | 国产夫妻性生活自拍 | 日韩久久久久久久久久久久 | 一区二区三区四区精品 | 亚洲欧美视频网站 | av不卡在线看 | 久久免费视频2 | 天天碰天天操视频 | 深夜男人影院 | 天堂va在线高清一区 | 成人免费在线观看电影 | 国产视频二区三区 | 欧美看片 | 在线视频 你懂得 | 亚洲视频免费视频 | 99久久精品电影 | 成年人免费在线播放 | 992tv又爽又黄的免费视频 | 久久久久综合精品福利啪啪 | 操久在线 | 97超级碰| 中文字幕网站 | 国产裸体视频bbbbb | 久久福利精品 | 国产精品成人久久久 | 亚洲精品网页 | 欧美性色综合网 | 人人看黄色 | 欧美日韩另类视频 | 最近高清中文在线字幕在线观看 | 美女福利视频在线 | 日韩理论在线视频 | 97av免费视频 | 99热在线精品观看 | 久久最新网址 | 在线黄色av电影 | 成人va天堂| 国产在线观看中文字幕 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 国产黄大片在线观看 | 国产亚洲精品成人av久久ww | 久久超碰97| 中文字幕免费看 | 久久成人福利 | 日韩一级黄色片 | 国产精品美女999 | 中文字幕影片免费在线观看 | 午夜精品福利一区二区三区蜜桃 | 黄色在线观看网站 | 婷婷伊人五月 | 久久综合九色九九 | 久久精品99国产 | 97视频在线免费观看 | 日韩欧美v | 特级西西444www大精品视频免费看 | 午夜三级在线 | 在线电影日韩 | 国产中文字幕在线视频 | 一级黄色片在线播放 | 亚洲三级网站 | 全久久久久久久久久久电影 | 九九热在线播放 | 亚洲精品视频中文字幕 | 久久男人免费视频 | 久久精品一区二区三区中文字幕 | 日韩av手机在线看 | 久久国产精品久久精品国产演员表 | 色香蕉在线 | 韩日精品在线观看 | 久久久这里有精品 | 欧美日韩高清一区二区 国产亚洲免费看 | 天堂在线视频免费观看 | 免费黄色网址大全 | 98涩涩国产露脸精品国产网 | av性网站 | 成人av影院在线观看 | 人人爽人人片 | 国产黄色理论片 | 日韩精品久久久久久久电影竹菊 | 国产在线观看二区 | 99热这里只有精品久久 | 波多野结衣日韩 | 99草在线视频 | 日韩 精品 一区 国产 麻豆 | 久久久综合色 | 久久久精品成人 | 精品天堂av | 欧美色图视频一区 | 日日干天天爽 | 国产a国产 | 亚洲国产精彩中文乱码av | 国产又粗又猛又爽又黄的视频免费 | 777xxx欧美| 久久久久欠精品国产毛片国产毛生 | 午夜精品一二区 | 四虎成人网 | 天天综合色 | av女优中文字幕在线观看 | 欧美最猛性xxx | 天天添夜夜操 | 玖玖玖在线观看 | 亚洲日韩中文字幕在线播放 | 狠狠干综合网 | 久久99精品国产麻豆婷婷 | 免费在线成人av电影 | 五月婷婷激情 | 丁香久久激情 | 中文字幕一区二 | 午夜精品福利一区二区 | 激情综合五月网 | 久久视频二区 | 男女视频国产 | 色网av | 久久爱影视i | 久久综合福利 | 成人观看视频 | www.久久久com| 精品成人a区在线观看 | 日韩国产欧美在线视频 | 欧美成年网站 | 毛片网站免费 | 99热在线免费观看 | 91成人天堂久久成人 | 久久久国产精品一区二区中文 | 在线91视频 | 在线黄色av | 精品高清视频 | 国模视频一区二区三区 | 欧美日韩综合在线观看 | 久久国产精品视频免费看 | 精品国产乱码久久久久久浪潮 | 国内精品久久久精品电影院 | 国产一级高清 | 精品久久久久久国产 | 久久久综合九色合综国产精品 | 国产精品久久久久永久免费看 | 操操操日日 | 91av免费观看 | 日韩色av色资源 | 国产精品久久久久久一区二区三区 | 亚洲精品视频在线观看免费视频 | 九九视频免费观看视频精品 | 成人a毛片| www操操| 日日摸日日| av国产网站| 亚洲高清在线精品 | www.97视频 | 奇米影视999 | 国产丝袜一区二区三区 | 人人澡人人爱 | 美女国产在线 | 丁香视频| 国产高清在线免费观看 | 99精品国产一区二区 | 欧美激情第28页 | 97精产国品一二三产区在线 | 99精品视频免费观看视频 | 欧美日韩国产在线一区 | av中文字幕免费在线观看 | 亚洲资源在线网 | 在线 成人| 欧美日韩精品在线观看视频 | 99视| 日韩三级免费观看 | 日韩一区二区三区视频在线 | 色干干 | 天天射天天操天天 | a级国产乱理论片在线观看 伊人宗合网 | 国产精品免费久久 | 97色视频在线 | 超碰97中文 | 国产精品中文字幕在线播放 | 深夜免费福利 | 国产操在线 | 亚洲精选国产 | 一区二区三区av在线 | 97视频资源| 91精品一区二区三区蜜臀 | www.五月天色 | 国产精品一区二区三区久久 | 免费成人结看片 | 在线免费国产 | 久久艹国产视频 | 天天干,夜夜爽 | 2021国产在线 | 天天干亚洲 | 中文字幕电影一区 | 欧美影院久久 | 欧美狠狠操 | 狠狠色噜噜狠狠狠狠2021天天 | 天天色天天综合网 | 婷婷激情五月 | 免费在线观看成人av | 美女福利视频 | 视频一区在线免费观看 | 日韩av免费一区 | 日日夜夜人人精品 | 91av视频在线观看免费 | 国产 日韩 中文字幕 | 欧美性精品 | 国产黄色网 | 亚洲午夜小视频 | 91探花国产综合在线精品 | 五月婷婷视频在线观看 | 久香蕉 | 中文字幕在线观看三区 | 亚洲伦理一区二区 | 亚洲精品国产视频 | 中文欧美字幕免费 | 精品免费一区二区三区 | 国产精品久久久久aaaa | 国产亚洲精品av | 狠狠躁夜夜a产精品视频 | 热久久免费视频 | 九九精品视频在线 | 欧美福利精品 | 久操中文字幕在线观看 | 狠狠色丁香久久婷婷综合五月 | 亚洲高清在线观看视频 | 精品国产伦一区二区三区观看体验 | 欧美激情片在线观看 | 亚洲在线色 | 日韩欧美极品 | 国产精品99久久久久的智能播放 | 在线免费观看羞羞视频 | 日本三级不卡 | 色婷婷视频在线观看 | 国产69精品久久99不卡的观看体验 | 色综合久久88色综合天天6 | 99在线精品视频观看 | 人人插超碰| 91成人在线免费观看 | 国产成人精品一区在线 | 2024av| 久久精品电影网 | 伊人色综合久久天天网 | 久久在线视频在线 | 97成人在线 | 国产不卡在线观看视频 | 国产精品久久一卡二卡 | 日韩成人一级大片 | 中文字幕成人在线 | 日韩视频在线播放 | 国产亚洲成av人片在线观看桃 | 91精品中文字幕 | 狠狠色丁香九九婷婷综合五月 | a级片在线播放 | 69国产盗摄一区二区三区五区 | 337p西西人体大胆瓣开下部 | 91网免费观看 | 日韩成人看片 | 在线免费性生活片 | 亚洲综合狠狠干 | 天天操偷偷干 | 欧美综合久久久 | 亚洲情影院 | 免费黄色av | 国产成人av网址 | 国产1级毛片 | 97免费| av亚洲产国偷v产偷v自拍小说 | 玖玖在线播放 | 欧美精品在线观看免费 | 国产69精品久久久久99 | 人人插人人干 | 成年人在线免费看 | 日韩黄色在线 | 狠狠做深爱婷婷综合一区 | 五月亚洲综合 | 亚洲欧洲国产视频 | 中文字幕 第二区 | 成人一级在线 | 日韩在线视频网 | 久久综合亚洲鲁鲁五月久久 | 久久任你操 | 一级黄色片在线免费看 | 91在线在线观看 | 夜夜骑天天操 | 91高清一区 | 在线播放一区二区三区 | 色综合久久88 | 天天亚洲 | 成人免费在线视频观看 | 一区在线免费观看 | 久久精品5| av不卡免费看 | 成人黄性视频 | 日韩一区二区三区在线观看 | 国产69精品久久app免费版 | 国产精品久久久久久69 | 超级碰碰碰视频 | 99视频在线免费 | 日韩午夜视频在线观看 | 日韩av电影免费在线观看 | 日日操日日干 | 国产精品久久毛片 | 在线观看成人网 | 亚洲国产精品电影 | 精品视频中文字幕 | 99久久这里只有精品 | 久久不见久久见免费影院 | 日本精品视频在线观看 | 欧美一区二区精品在线 | 99久久婷婷国产综合亚洲 | 99精品视频在线观看 | 免费看在线看www777 | 国内毛片毛片 | 久久综合亚洲鲁鲁五月久久 | 亚洲人成免费网站 | 特黄特色特刺激视频免费播放 | 丁香激情综合 | 黄色大全免费网站 | 国产精品自拍av | 天天亚洲综合 | 欧美日韩在线观看一区二区三区 | 99久久99久久综合 | 日韩在线视频免费看 | 在线观看黄 | 国产精品黄色 | 久久久久成人精品亚洲国产 | 在线 国产一区 | 激情视频91 | 国产视频一区二区在线观看 | 久久精品毛片基地 | 亚洲成av人片一区二区梦乃 | 成人福利av | 精品a级片| 久久视影 | 中文字幕免费观看全部电影 | 国产精品1区2区3区 久久免费视频7 | 天天草天天草 | 国产美女精品视频免费观看 | 毛片网在线观看 | 欧美另类一二三四区 | 久热免费在线观看 | 国产一区在线观看视频 | 国产男男gay做爰 | 欧美不卡视频在线 | 黄色免费在线看 | 粉嫩av一区二区三区免费 | 国产福利在线免费 | 久久精品国产免费观看 | 日韩免费视频在线观看 | 狠狠久久婷婷 | 香蕉影院在线 | 久草在线最新视频 | 亚洲欧洲成人 | 成人免费视频在线观看 | 国产视频日本 | 99视频一区 | 成人免费在线播放视频 | 久久久天堂| 国产精品视频在线观看 | 成人午夜在线观看 | 91精品免费 | 五月综合网 | 伊人资源视频在线 | 在线精品视频免费播放 | 麻豆久久精品 | 97超碰在线久草超碰在线观看 | 在线免费观看羞羞视频 | 免费日韩一区二区 | 成人毛片一区二区三区 | 久久综合网色—综合色88 | 国产精品黄色av | 亚洲va在线va天堂 | 精品女同一区二区三区在线观看 | 黄色在线网站噜噜噜 | 午夜av剧场 | 99视频 | 97av在线 | 婷婷激情在线 | 国产专区在线视频 | 亚洲人成网站精品片在线观看 | 精品国产乱码久久 | 天天色天天干天天 | 欧美老人xxxx18 | 99久久久久免费精品国产 | 亚洲激情小视频 | 国产精品99久久久久久大便 | 欧美日本在线视频 | 久久久免费高清视频 | 午夜黄色 | 成片免费 | 激情影音 | 久久国产精品99久久久久久老狼 | 亚州免费视频 | 91麻豆免费版 | 成人黄色片免费看 | 精品视频国产一区 | 久久超级碰视频 | 欧美在线a视频 | 久久久久高清 | 久久人人爽人人爽人人 | 日韩网站在线看片你懂的 | 国产午夜精品福利视频 | 久艹视频在线免费观看 | 精品专区一区二区 | 99久久婷婷国产综合精品 | 在线观看国产麻豆 | av在线网站大全 | 成人一区二区三区在线观看 | 久久久久久激情 | 88av网站| 亚洲国产精品久久久 | 69国产盗摄一区二区三区五区 | 亚洲免费婷婷 | 韩日精品在线观看 | 国产生活一级片 | 亚洲精品麻豆视频 | 在线免费看黄色 | 91九色视频国产 | 在线观看日韩精品 | 国产视频在线观看一区二区 | 欧美性色综合 | 日韩电影中文字幕在线观看 | 日韩在线免费播放 | 日日摸日日爽 | 国产成人综合图片 | 香蕉在线播放 | av在线播放一区二区三区 | 亚洲精品视频网站在线观看 | 中文字幕一区二区在线观看 | 亚洲视频资源在线 | 欧美日韩国产一二三区 | 中文字幕在线观看亚洲 | 国产伦精品一区二区三区四区视频 | 99精品热 | 国产日韩精品久久 | 91九色视频国产 | 国内精品久久久久影院一蜜桃 | 日韩欧美成人网 | 色综合夜色一区 | 欧美另类sm图片 | 99久久这里只有精品 | 色婷婷狠狠五月综合天色拍 | 午夜精品久久久久久 | 精品视频在线播放 | 中文字幕在线播放日韩 | 成人免费观看视频网站 | 国产涩涩网站 | 成人va视频 | 久草视频免费在线观看 | 亚洲精品成人网 | 中文字幕精品视频 | 欧美另类一二三四区 | 天天插天天色 | 久久久久久美女 | 黄色视屏在线免费观看 | 色香蕉在线视频 | 久久久久电影网站 | 高清av在线免费观看 | 91激情视频在线 | 亚洲三级av | 亚洲精品在线一区二区三区 | 亚洲电影免费 | 国产精品久久中文字幕 | 色综合网在线 | 天天躁天天躁天天躁婷 | 国产成人精品一区二 | 国产精品免费在线视频 | 97超级碰碰碰碰久久久久 | 在线久热 | 久久视频这里有精品 | 91九色最新地址 | 黄色电影小说 | 国产精品毛片完整版 | 久久影视网 | 久久99偷拍视频 | 亚洲精品国产精品国自产观看 | 婷婷久久一区二区三区 | 国产原创av片 | 天天色宗合 | 欧美特一级片 | 日本中文字幕在线免费观看 | h视频日本 | 91亚洲精品久久久蜜桃网站 | 欧美性生活久久 | 全黄网站 | 中文字幕在线不卡国产视频 | 天天爱天天射天天干天天 | 久久久国产精品免费 | 中文在线天堂资源 | 久久久亚洲麻豆日韩精品一区三区 | 精品国产日本 | 伊人五月天.com | 91粉色视频 | 久久九九久久 | 国产成人亚洲在线观看 | 超碰97免费观看 | 国产视频日韩视频欧美视频 | 精品一区二区在线免费观看 | 香蕉久久久久久久 | 亚洲男人天堂a | 国产精品资源在线观看 | 免费观看久久 | 日韩在线视频免费播放 | 免费看黄色大全 | 日韩在线视频观看免费 | 天天草天天草 | 日韩av一区二区在线播放 | 久久久九色精品国产一区二区三区 | 人人澡人人爽欧一区 | 日韩最新av |