久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP哈希表實(shí)現(xiàn)算法原理解析

瀏覽:109日期:2022-09-08 14:38:28

在PHP內(nèi)核中,其中一個(gè)很重要的數(shù)據(jù)結(jié)構(gòu)就是HashTable。我們常用的數(shù)組,在內(nèi)核中就是用HashTable來(lái)實(shí)現(xiàn)。那么,PHP的HashTable是怎么實(shí)現(xiàn)的呢?最近在看HashTable的數(shù)據(jù)結(jié)構(gòu),但是算法書(shū)籍里面沒(méi)有具體的實(shí)現(xiàn)算法,剛好最近也在閱讀PHP的源碼,于是參考PHP的HashTable的實(shí)現(xiàn),自己實(shí)現(xiàn)了一個(gè)簡(jiǎn)易版的HashTable,總結(jié)了一些心得,下面給大家分享一下。

HashTable的介紹

哈希表是實(shí)現(xiàn)字典操作的一種有效數(shù)據(jù)結(jié)構(gòu)。

定義

簡(jiǎn)單地說(shuō),HashTable(哈希表)就是一種鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。支持插入,查找,刪除等操作。在一些合理的假設(shè)下,在哈希表中的所有操作的時(shí)間復(fù)雜度是O(1)(對(duì)相關(guān)證明感興趣的可以自行查閱)。

實(shí)現(xiàn)哈希表的關(guān)鍵

在哈希表中,不是使用關(guān)鍵字做下標(biāo),而是通過(guò)哈希函數(shù)計(jì)算出key的哈希值作為下標(biāo),然后查找/刪除時(shí)再計(jì)算出key的哈希值,從而快速定位元素保存的位置。

在一個(gè)哈希表中,不同的關(guān)鍵字可能會(huì)計(jì)算得到相同的哈希值,這叫做“哈希沖突”,就是處理兩個(gè)或多個(gè)鍵的哈希值相同的情況。解決哈希沖突的方法有很多,開(kāi)放尋址法,拉鏈法等等。

因此,實(shí)現(xiàn)一個(gè)好的哈希表的關(guān)鍵就是一個(gè)好的哈希函數(shù)和處理哈希沖突的方法。

Hash函數(shù)

判斷一個(gè)哈希算法的好壞有以下定義:

一致性,等價(jià)的鍵必然產(chǎn)生相等的哈希值; 高效性,計(jì)算簡(jiǎn)便; 均勻性,均勻地對(duì)所有的鍵進(jìn)行哈希。 哈希函數(shù)建立了關(guān)鍵值與哈希值的對(duì)應(yīng)關(guān)系,即:h = hash_func(key)。對(duì)應(yīng)關(guān)系見(jiàn)下圖:

hash-exam

設(shè)計(jì)一個(gè)完美的哈希函數(shù)就交由專家去做吧,我們只管用已有的較成熟的哈希函數(shù)就好了。PHP內(nèi)核使用的哈希函數(shù)是time33函數(shù),又叫DJBX33A,其實(shí)現(xiàn)如下:

static inline ulong zend_inline_hash_func(const char *arKey, uint nKeyLength){ register ulong hash = 5381; /* variant with the hash unrolled eight times */ for (; nKeyLength >= 8; nKeyLength -= 8) { hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; hash = ((hash << 5) + hash) + *arKey++; } switch (nKeyLength) { case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ case 1: hash = ((hash << 5) + hash) + *arKey++; break; case 0: break; EMPTY_SWITCH_DEFAULT_CASE() } return hash;}

注:函數(shù)使用了一個(gè)8次循環(huán)+switch來(lái)實(shí)現(xiàn),是對(duì)for循環(huán)的優(yōu)化,減少循環(huán)的運(yùn)行次數(shù),然后在switch里面執(zhí)行剩下的沒(méi)有遍歷到的元素。

拉鏈法

將所有具有相同哈希值的元素都保存在一條鏈表中的方法叫拉鏈法。查找的時(shí)候通過(guò)先計(jì)算key對(duì)應(yīng)的哈希值,然后根據(jù)哈希值找到對(duì)應(yīng)的鏈表,最后沿著鏈表順序查找相應(yīng)的值。

PHP的HashTable結(jié)構(gòu)

簡(jiǎn)單地介紹了哈希表的數(shù)據(jù)結(jié)構(gòu)之后,繼續(xù)看看PHP中是如何實(shí)現(xiàn)哈希表的。

PHP內(nèi)核hashtable的定義:

typedef struct _hashtable { uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; zend_bool bApplyProtection; #if ZEND_DEBUGint inconsistent; #endif} HashTable; nTableSize,HashTable的大小,以2的倍數(shù)增長(zhǎng) nTableMask,用在與哈希值做與運(yùn)算獲得該哈希值的索引取值,arBuckets初始化后永遠(yuǎn)是nTableSize-1 nNumOfElements,HashTable當(dāng)前擁有的元素個(gè)數(shù),count函數(shù)直接返回這個(gè)值 nNextFreeElement,表示數(shù)字鍵值數(shù)組中下一個(gè)數(shù)字索引的位置 pInternalPointer,內(nèi)部指針,指向當(dāng)前成員,用于遍歷元素 pListHead,指向HashTable的第一個(gè)元素,也是數(shù)組的第一個(gè)元素 pListTail,指向HashTable的最后一個(gè)元素,也是數(shù)組的最后一個(gè)元素。與上面的指針結(jié)合,在遍歷數(shù)組時(shí)非常方便,比如reset和endAPI arBuckets,包含bucket組成的雙向鏈表的數(shù)組,索引用key的哈希值和nTableMask做與運(yùn)算生成 pDestructor,刪除哈希表中的元素使用的析構(gòu)函數(shù) persistent,標(biāo)識(shí)內(nèi)存分配函數(shù),如果是TRUE,則使用操作系統(tǒng)本身的內(nèi)存分配函數(shù),否則使用PHP的內(nèi)存分配函數(shù) nApplyCount,保存當(dāng)前bucket被遞歸訪問(wèn)的次數(shù),防止多次遞歸 bApplyProtection,標(biāo)識(shí)哈希表是否要使用遞歸保護(hù),默認(rèn)是1,要使用

舉一個(gè)哈希與mask結(jié)合的例子:

例如,”foo”真正的哈希值(使用DJBX33A哈希函數(shù))是193491849。如果我們現(xiàn)在有64容量的哈希表,我們明顯不能使用它作為數(shù)組的下標(biāo)。取而代之的是通過(guò)應(yīng)用哈希表的mask,然后只取哈希表的低位。

hash | 193491849 | 0b1011100010000111001110001001& mask | & 63 | & 0b0000000000000000000000111111----------------------------------------------------------------------= index | = 9| = 0b0000000000000000000000001001

因此,在哈希表中,foo是保存在arBuckets中下標(biāo)為9的bucket向量中。

bucket結(jié)構(gòu)體的定義

typedef struct bucket { ulong h; uint nKeyLength; void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; struct bucket *pLast; const char *arKey;} Bucket; h,哈希值(或數(shù)字鍵值的key nKeyLength,key的長(zhǎng)度 pData,指向數(shù)據(jù)的指針 pDataPtr,指針數(shù)據(jù) pListNext,指向HashTable中的arBuckets鏈表中的下一個(gè)元素 pListLast,指向HashTable中的arBuckets鏈表中的上一個(gè)元素 pNext,指向具有相同hash值的bucket鏈表中的下一個(gè)元素 pLast,指向具有相同hash值的bucket鏈表中的上一個(gè)元素 arKey,key的名稱

PHP中的HashTable是采用了向量加雙向鏈表的實(shí)現(xiàn)方式,向量在arBuckets變量保存,向量包含多個(gè)bucket的指針,每個(gè)指針指向由多個(gè)bucket組成的雙向鏈表,新元素的加入使用前插法,即新元素總是在bucket的第一個(gè)位置。由上面可以看到,PHP的哈希表實(shí)現(xiàn)相當(dāng)復(fù)雜。這是它使用超靈活的數(shù)組類型要付出的代價(jià)。

HashTable相關(guān)API

zend_hash_init zend_hash_add_or_update zend_hash_find zend_hash_del_key_or_index

zend_hash_init

函數(shù)執(zhí)行步驟

設(shè)置哈希表大小

設(shè)置結(jié)構(gòu)體其他成員變量的初始值 (包括釋放內(nèi)存用的析構(gòu)函數(shù)pDescructor)詳細(xì)代碼注解點(diǎn)擊:zend_hash_init源碼

注:

1、pHashFunction在此處并沒(méi)有用到,php的哈希函數(shù)使用的是內(nèi)部的zend_inline_hash_func

2、zend_hash_init執(zhí)行之后并沒(méi)有真正地為arBuckets分配內(nèi)存和計(jì)算出nTableMask的大小,真正分配內(nèi)存和計(jì)算nTableMask是在插入元素時(shí)進(jìn)行CHECK_INIT檢查初始化時(shí)進(jìn)行。

zend_hash_add_or_update

函數(shù)執(zhí)行步驟

檢查鍵的長(zhǎng)度 檢查初始化 計(jì)算哈希值和下標(biāo) 遍歷哈希值所在的bucket,如果找到相同的key且值需要更新,則更新數(shù)據(jù),否則繼續(xù)指向bucket的下一個(gè)元素,直到指向bucket的最后一個(gè)位置 為新加入的元素分配bucket,設(shè)置新的bucket的屬性值,然后添加到哈希表中

如果哈希表空間滿了,則重新調(diào)整哈希表的大小

zend_hash_add_or_update

CONNECT_TO_BUCKET_DLLIST是將新元素添加到具有相同hash值的bucket鏈表。

CONNECT_TO_GLOBAL_DLLIST是將新元素添加到HashTable的雙向鏈表。

詳細(xì)代碼和注解請(qǐng)點(diǎn)擊:zend_hash_add_or_update代碼注解。

zend_hash_find

函數(shù)執(zhí)行步驟

計(jì)算哈希值和下標(biāo) 遍歷哈希值所在的bucket,如果找到key所在的bucket,則返回值,否則,指向下一個(gè)bucket,直到指向bucket鏈表中的最后一個(gè)位置

詳細(xì)代碼和注解請(qǐng)點(diǎn)擊:zend_hash_find代碼注解。

zend_hash_del_key_or_index

函數(shù)執(zhí)行步驟

計(jì)算key的哈希值和下標(biāo) 遍歷哈希值所在的bucket,如果找到key所在的bucket,則進(jìn)行第三步,否則,指向下一個(gè)bucket,直到指向bucket鏈表中的最后一個(gè)位置 如果要?jiǎng)h除的是第一個(gè)元素,直接將arBucket[nIndex]指向第二個(gè)元素;其余的操作是將當(dāng)前指針的last的next執(zhí)行當(dāng)前的next 調(diào)整相關(guān)指針 釋放數(shù)據(jù)內(nèi)存和bucket結(jié)構(gòu)體內(nèi)存

詳細(xì)代碼和注解請(qǐng)點(diǎn)擊:zend_hash_del_key_or_index代碼注解。

性能分析

PHP的哈希表的優(yōu)點(diǎn):PHP的HashTable為數(shù)組的操作提供了很大的方便,無(wú)論是數(shù)組的創(chuàng)建和新增元素或刪除元素等操作,哈希表都提供了很好的性能,但其不足在數(shù)據(jù)量大的時(shí)候比較明顯,從時(shí)間復(fù)雜度和空間復(fù)雜度看看其不足。

不足如下:

保存數(shù)據(jù)的結(jié)構(gòu)體zval需要單獨(dú)分配內(nèi)存,需要管理這個(gè)額外的內(nèi)存,每個(gè)zval占用了16bytes的內(nèi)存; 在新增bucket時(shí),bucket也是額外分配,也需要16bytes的內(nèi)存; 為了能進(jìn)行順序遍歷,使用雙向鏈表連接整個(gè)HashTable,多出了很多的指針,每個(gè)指針也要16bytes的內(nèi)存; 在遍歷時(shí),如果元素位于bucket鏈表的尾部,也需要遍歷完整個(gè)bucket鏈表才能找到所要查找的值

PHP的HashTable的不足主要是其雙向鏈表多出的指針及zval和bucket需要額外分配內(nèi)存,因此導(dǎo)致占用了很多內(nèi)存空間及查找時(shí)多出了不少時(shí)間的消耗。

后續(xù)

上面提到的不足,在PHP7中都很好地解決了,PHP7對(duì)內(nèi)核中的數(shù)據(jù)結(jié)構(gòu)做了一個(gè)大改造,使得PHP的效率高了很多,因此,推薦PHP開(kāi)發(fā)者都將開(kāi)發(fā)和部署版本更新吧??纯聪旅孢@段PHP代碼:

<?php$size = pow(2, 16); $startTime = microtime(true);$array = array();for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) { $array[$key] = 0;}$endTime = microtime(true);echo ’插入 ’, $size, ’ 個(gè)惡意的元素需要 ’, $endTime - $startTime, ’ 秒’, 'n'; $startTime = microtime(true);$array = array();for ($key = 0, $maxKey = $size - 1; $key <= $maxKey; ++$key) { $array[$key] = 0;}$endTime = microtime(true);echo ’插入 ’, $size, ’ 個(gè)普通元素需要 ’, $endTime - $startTime, ’ 秒’, 'n';

上面這個(gè)demo是有多個(gè)hash沖突時(shí)和無(wú)沖突時(shí)的時(shí)間消耗比較。筆者在PHP5.4下運(yùn)行這段代碼,結(jié)果如下

插入 65536 個(gè)惡意的元素需要 43.72204709053 秒

插入 65536 個(gè)普通元素需要 0.009843111038208 秒

而在PHP7上運(yùn)行的結(jié)果:

插入 65536 個(gè)惡意的元素需要 4.4028408527374 秒

插入 65536 個(gè)普通元素需要 0.0018510818481445 秒

可見(jiàn)不論在有沖突和無(wú)沖突的數(shù)組操作,PHP7的性能都提升了不少,當(dāng)然,有沖突的性能提升更為明顯。至于為什么PHP7的性能提高了這么多,值得繼續(xù)深究。

最后再安利一下,筆者github上有一個(gè)簡(jiǎn)易版的HashTable的實(shí)現(xiàn):HashTable實(shí)現(xiàn)

另外,我在github有對(duì)PHP源碼更詳細(xì)的注解。感興趣的可以圍觀一下,給個(gè)star。PHP5.4源碼注解。可以通過(guò)commit記錄查看已添加的注解。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 中文字幕亚洲一区二区三区 | 欧美日韩视频在线第一区 | 欧美日本亚洲 | 亚洲国产精品久久久 | 国产色婷婷精品综合在线播放 | 亚洲成人高清 | 日韩手机电影 | 国产精品一区二区在线观看 | 日本不卡一区二区 | 欧美日黄| 欧美日韩成人在线视频 | 91九色国产视频 | 日韩成人免费电影 | 91免费版在线观看 | 另类中文字幕 | a亚洲精品| 亚洲精品一区二区三区麻豆 | 黄色福利 | 一级黄色录像视频 | 欧美视频精品 | 精品99久久久久久 | 久久成人免费观看 | 奇米精品一区二区三区在线观看 | 夜夜草av | 成人二区 | 日本中文字幕在线观看 | 欧美日本韩国一区二区三区 | 久热中文字幕 | 久久久久亚洲av毛片大全 | 成人午夜视频在线观看 | 日韩精品1区2区 | 久久精品国产99国产 | 亚洲一区 | 日韩一区二区在线播放 | 直接看av的网站 | 日韩成人国产 | 亚洲人成网站999久久久综合 | 欧美一区二区三区 | 成人精品久久久 | 国产成人综合一区二区三区 | 国产美女黄色片 | 日韩av一区二区在线观看 | 91免费在线视频 | 不卡一区二区三区四区 | 久久视频精品 | 无码日韩精品一区二区免费 | 天堂资源 | 久久久久久综合 | 中国特级毛片 | 一区二区视屏 | 欧美精品第一页 | 成年人视频免费在线看 | 久久综合一区二区 | 看久久毛片| 国产91视频一区二区 | 热re99久久精品国99热线看 | 五月激情综合 | 可以在线看的黄色网址 | 男人天堂av网 | 免费成人在线网站 | 在线观看一区二区三区四区 | 81精品国产乱码久久久久久 | 成人午夜影院 | 成人免费在线观看视频 | 国产一级在线观看 | 午夜精品久久久久久久久久久久久 | 久久精品一区二区三区四区 | 中文字幕66页 | 亚洲一区二区免费 | 天天天天爽 | av超碰| 麻豆精品国产91久久久久久 | yy6080久久伦理一区二区 | 国产精品久久久久久久久久小说 | 夏同学福利网 | 日韩精品一区在线 | 国产视频精品在线观看 | 在线观看免费av网 | 成人精品 | 欧美日韩欧美日韩 | 日韩电影一区 | 亚洲精品一区二区三区精华液 | 草草网| 亚洲永久免费观看 | 99亚洲| 成人久久久精品乱码一区二区三区 | 亚洲高清视频一区二区三区 | 国产亚洲精品久久久优势 | 国产精品久久久久久久久久三级 | 国产目拍亚洲精品99久久精品 | 精品国产乱码一区二区三区 | 性视频网| 冷水浴在线观看 | 在线日韩一区 | 欧美电影一区二区三区 | 亚洲精品中文字幕在线观看 | av一区二区三区四区 | 色综合成人 | 亚州成人 | 久色视频在线 | 精品视频久久 | 中文字幕亚洲二区 | 日韩欧美视频一区 | 国产黄色在线观看 | 日日摸天天爽天天爽视频 | 四色成人av永久网址 | 3bmm在线观看视频免费 | 精品影院| 日本精品久久久一区二区三区 | 成人免费xxxxx在线视频软件 | 国产精品久久免费视频在线 | 欧美日韩国产一区二区 | 欧美成人精品在线 | 国产一区精品电影 | 日日操综合 | 午夜草逼 | 欧美激情国产日韩精品一区18 | 99久久99| 日韩高清成人 | 天天艹夜夜艹 | 国产精品免费久久 | 国产999精品久久久久久 | 亚洲精品久久久久久久久久久久久 | 亚洲成人免费 | 狠狠艹视频 | 久久久久久久久国产 | 国产一区免费 | 都市激情av | 欧美精品国产精品 | 一区二区免费在线视频 | 中文字幕精品一区 | 日本aⅴ毛片成人实战推荐 成人免毛片 | 狠狠综合久久 | 黄色大片视频网站 | 中文字幕久久久 | 91视频免费看 | 精品国产第一国产综合精品 | 久久国产成人 | 日韩欧美在线看 | 日韩免费视频 | 中文字幕一区二区三区在线视频 | 亚洲男人av| 毛片免费在线 | 国产精品一区二区av | xx视频在线观看 | www.国产 | 日本a在线 | 日日射天天干 | a免费观看 | 91中文| 欧美精品日韩 | 国产精品免费一区二区三区四区 | 久一区二区三区 | 91久久看片 | 高清一区二区三区 | 精品99久久久久久 | 国产精品女同一区二区久久夜 | a级片在线观看 | 九九福利| 黄色片网站视频 | 国产三级在线观看 | 97超碰免费 | 国产免费黄色大片 | 亚洲成人免费在线观看 | 成人在线免费 | 蜜桃av在线播放 | 久久精品 | 免费xxxxx在线观看网站软件 | 欧美精品成人一区二区三区四区 | 久草免费在线视频 | 国产成人精品亚洲777人妖 | 亚洲成av人片一区二区梦乃 | 欧美激情视频一区二区三区在线播放 | 人人干人人干人人干 | 精品日韩一区 | 99热精品在线 | 亚洲国产精品久久久 | 狠狠爱亚洲 | 国产福利一区二区 | 久久婷婷色 | 精品成人av | 国产成人高清精品免费5388 | 日本免费一区二区三区 | 亚洲91在线 | 爱干在线 | 成人a毛片 | 天堂免费在线 | 成人性视频在线 | 99影视 | 亚洲一区综合 | 亚洲高清精品视频 | 欧美三级影院 | 日韩电影在线 | 亚洲精品国产a久久久久久 国产毛片毛片 | 日韩一区二区在线视频 | 精品成人在线 | 中文字幕一二三区 | 91,看片 | 免费看一区二区三区 | 国产精彩视频 | 日韩欧美在线综合 | 国产精品一品二区三区的使用体验 | 国内精品一区二区 | 激情欧美一区二区三区 | 国产亚洲在线 | 亚洲精品一区二区三区中文字幕 | 久草新视频在线观看 | 蜜桃中文字幕 | 国产偷录视频叫床高潮对白 | 一区二区三区在线免费观看 | 九色av | 久久久久国产精品一区二区 | 午夜久久久 | 91欧美激情一区二区三区成人 | 在线精品国产 | 欧美美乳 | 夜夜操天天操 | 成人在线小视频 | 黄色免费在线观看 | 欧美乱码久久久久久蜜桃 | 久久久久久久精 | 嫩草影院网站入口 | 精品久久久久国产 | 国产精品第一国产精品 | 久久久久久成人精品 | 九九成人 | 午夜寂寞少妇aaa片毛片 | 亚洲午夜精品视频 | 国产精品69毛片高清亚洲 | 人人种亚洲 | 日韩精品一区二区在线观看 | 国产一区二区精品 | 国产一区二区久久 | 亚洲国产成人久久一区二区三区 | 一级女性全黄久久生活片免费 | 亚洲精品自拍 | www..99热 | 亚洲高清视频在线观看 | 日韩1区3区4区第一页 | 亚洲精品成人 | 日韩一区二 | 婷婷在线视频 | 91在线成人 | 99爱在线观看 | 亚洲视频一区二区三区 | 91电影院 | av免费在线观看网站 | 久久精品麻豆 | 中文字幕精品一区久久久久 | 精品久久电影 | 国产日产精品一区二区三区四区 | 亚洲女人天堂网 | 色婷婷久久一区二区三区麻豆 | 天堂av中文在线 | 国产精品日韩在线观看 | 精品国产乱码久久久久夜 | 久久久精品一区 | 欧美中文字幕一区二区 | 国产精品久久久久国产a级 99精品欧美一区二区三区综合在线 | 欧美日本免费 | 久久伊99综合婷婷久久伊 | 能免费看av的网站 | 日韩电影免费在线观看中文字幕 | 欧美三及片 | 国产亚洲欧美一区 | 国产成人精品一区二区三区视频 | 久久久成人精品 | 韩国久久精品 | porn一区 | 精品国模一区二区三区欧美 | 在线免费观看日韩视频 | 亚洲成人一区二区 | 成人在线播放 | 欧美国产在线观看 | 免费观看av电影 | 久久亚洲综合 | 在线观看av国产一区二区 | 国产成人精品a视频一区www | 欧美一级二级三级视频 | 天天久久 | 亚洲一区二区av | 成人一级毛片 | 国产精品久久久久久亚洲调教 | 久久久www成人免费无遮挡大片 | 日韩欧美h | 久久综合一区二区三区 | 国产欧美精品一区二区色综合 | 欧美日韩一区二区三区四区 | 精品日韩一区二区三区 | 国产中文在线 | 国产丝袜视频 | 在线日韩成人 | 亚洲一区成人 | 天天干人人插 | а√天堂中文在线资源8 | 黄色a级| 成人国产一区 | 国产精品地址 | 日韩a视频 | 天天拍天天草 | 久久男人天堂 | 国产精品免费观看 | av免费网站在线观看 | 亚洲欧美一区二区三区在线 | 国产欧美精品一区二区三区四区 | 欧美综合在线观看 | 亚洲国产中文字幕 | ririsao亚洲国产中文 | 一区二区精品在线 | 亚洲国产精品一区二区三区 | 国产一区二区影院 | 热久久久| 国产欧美专区 | 国产一区二区三区在线免费观看 | 亚洲国产久 | 精品久久香蕉国产线看观看亚洲 | 日韩毛片免费视频一级特黄 | av片在线观看 | 在线观看中文字幕亚洲 | 欧美一区二区三区在线观看 | 亚洲成人精品 | 日本黄色一级片免费看 | 欧美第一色 | 国产精品久久久久一区二区三区 | 日韩精品一区二区三区在线播放 | 天堂一区二区三区四区 | 国产一区二区久久久 | 午夜在线影院 | 国产a级大片| 日韩成人免费电影 | 亚洲女人天堂网 | 色婷婷国产精品综合在线观看 | 刺激网 | 亚洲综合天堂网 | 欧美日韩成人在线 | 四季久久免费一区二区三区四区 | 一区二区久久 | 成年网站在线 | 久久国产99 | 欧美一区二区三 | 久久午夜精品 | 天天插天天操 | 欧美日韩国产精品一区二区亚洲 | 中文字幕视频一区 | 免费不卡视频 | 久久综合伊人77777 | 特级毛片在线大全免费播放 | 亚洲成a | 天天看天天操 | 亚洲一区二区精品 | 精品欧美一区二区三区久久久小说 | 动漫泳衣美女 | 日日夜夜一区二区 | 自拍偷拍第一页 | 超碰人人射 | 国产一区2区 | 亚洲精品国产二区 | 成人在线小视频 | 亚洲一区成人在线观看 | 日本另类αv欧美另类aⅴ | 久久国产精品一区二区三区 | 国产99久久久精品视频 | 国产精品久久久久久久久久 | 中文字幕日韩一区二区不卡 | 91精品国产91久久久久久黑人 | 黄色毛片在线观看 | 国产毛片精品 | 欧美性猛交一区二区三区精品 | 777777777亚洲妇女 | 最新国产中文字幕 | 欧美成人精品一区二区三区 | 久久av网 | 日本亚洲国产一区二区三区 | 99在线视频观看 | 国产一区精品视频 | 精品国产欧美一区二区三区不卡 | 午夜视| 欧美激情一区二区三区在线视频 | 久草精品视频 | 91亚洲精品视频 | 81精品国产乱码久久久久久 | 日韩一区二区福利 | 久久精品综合 | 91社区影院 | 国产在线一区不卡 | 亚洲精品一区二区三区中文字幕 | 久久精品国产久精国产 | 国内久久精品 | 欧美日本一区 | 一级特黄毛片 | 精品福利av导航 | 99精品国产一区二区三区 | 欧美精品第一页 | 国产精品极品美女在线观看免费 | 国产成人av电影 | 一级全黄少妇性色生活片免费 | 色爱区综合 | 国产成人小视频 | 夜夜视频| 91精品国产综合久久福利软件 | 精品三级在线观看 | 插插射啊爱视频日a级 | 久久免费国产 | 亚洲精品日本 | 国产激情性色视频在线观看 | 国产精品美女久久久久久不卡 | 成人深夜小视频 | 精品久久97 | 日韩日b视频 | 特黄特黄aaaa级毛片免费看 | 国产精品女教师av久久 | 亚洲热av | 涩涩视频在线免费看 | 偷拍电影一区二区三区 | 91成人在线 | 国产高清不卡在线 | 国内av网站 | 国产一级一级国产 | 黄色av观看 | 国产日本韩国在线 | 中文字幕一区二区三区四区 | 狠狠艹 | 天天成人综合网 | 成人资源在线观看 | 久热精品视频 | 精品日韩欧美一区二区在线播放 | 亚洲激情在线 | jizzjizzjizz亚洲女 | 久久久久久久av | 欧美激情精品久久久久久 | 一道本一区| 欧美一级一区 | 国产精品美女久久久久久久久久久 | a毛片国产| 日本久久二区 | 欧美成人免费 | 欧美一区二区三区男人的天堂 | 超碰一区二区三区 | 精品国产髙清在线看国产毛片 | 51国产午夜精品免费视频 | 91人人看| 欧美一区二区三区免费观看视频 | 91中文字幕在线观看 | 欧美成人在线免费视频 | 日韩精品一区二区三区在线播放 | 成人av播放 | 成人涩涩日本国产一区 | 女人毛片a毛片久久人人 | 欧美一区二区在线观看 | 欧美视频xxx | 国产激情在线视频 | 国产精一区二区 | 国产精品中文字幕在线观看 | 日韩精品免费在线观看 | 欧美一区二区三区爽大粗免费 | 国产在线h | 成年人免费看 | 日韩一区精品 | 国产精品伊人影院 | 国产在线视频一区二区 | 99视频精品| 亚洲高清一区二区三区 | 国产精品a久久久久 | aaaa大片 | 狠狠干美女 | 在线观看不卡一区 | 免费的av网站 | 亚洲午夜在线 | 亚洲精品国偷拍自产在线观看 | 亚洲精品免费视频 | 国产精品美女久久久久久久久久久 | 亚洲国产精品一区二区第一页 | 欧美一级淫片免费看 | 久久久精品国产 | 亚洲成人久久久 | 成人午夜在线视频 | 日韩中文字幕在线播放 | 国产精品成av人在线视午夜片 | 欧美黄色一区二区 | 国产九九精品视频 | 欧美亚洲一 | 欧美精品久久久 | 亚洲一区 中文字幕 | 中文字幕 亚洲一区 | 国产在线一 | 中国女人黄色大片 | 午夜久久久久 | 天天操妹子 | 成人在线视频免费观看 | 国产一区二区在线免费 | 国产精品久久久久久久久久妇女 | 午夜精品一区二区三区在线 | 亚洲一区二区三区四区的 | 五月婷婷狠狠爱 | 免费看黄视频网站 | 国产精品久久久久久久久岛 | 国产精品久久久久一区二区三区 | 日韩欧美精品一区 | 国产小视频在线 | 中文字幕亚洲第一 | 国产高清精品一区二区三区 | 精品视频一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 日韩成人免费视频 | 在线播放国产一区二区三区 | 国产极品探花 | 欧美第一网站 | 午夜视频在线观看网站 | 天天干天天操 | 国产精品中文字幕在线观看 | 亚洲三级在线播放 | 色久天堂 | 免费看黄视频网站 | 韩国精品一区二区 | 中文字幕在线电影观看 | 羞羞视频在线观看视频 | 国产精品久久7777 | 男女黄网站| 综合网视频| 欧美精品一区二区三区在线四季 | 亚洲黄色区| 另类天堂av | 久久伊人在 | 欧美成人免费一级人片100 | 91免费在线视频 | 精品欧美一区二区三区久久久小说 | 久久久久久国产一级毛片高清版 | 欧美一区二区精品 | 亚洲欧美中文日韩在线v日本 | 天天天操 | 天天草天天干天天 | 亚洲一区精品视频 | 在线日韩成人 | 天堂一区二区三区 | 欧美一区二区三区视频 | 日本福利网站 | 国产色在线 | 国产在线中文字幕 | 久久亚洲一区二区 | 欧美亚洲一级 | 伊人激情四射 | 国产日韩高清在线 | 在线观看91 | 午夜影院黄色 | 久久久久久久国产 | 久久精品国产免费 | 91色视频在线观看 | 日韩欧美黄色 | 久久久久亚洲一区二区三区 | 欧美日韩亚洲一区 | 欧美日韩综合精品 | 日本成人福利视频 | 国偷自产av一区二区三区 | 91最新| 国产精品一区二区三区四区 | 免费国产一区二区 | 国产一区二区三区免费观看 | 国产成人99久久亚洲综合精品 | 国产高清精品一区二区三区 | 日韩高清中文字幕 | 欧美激情一区二区三区蜜桃视频 | 亚洲第一网站 | 五月天婷婷在线视频 | 欧美日本免费一区二区三区 | 亚洲a级 | 亚洲天堂第一页 | 在线视频日韩 | 精品在线视频观看 | 日本精品一区二区在线观看 | 婷婷丁香五 | 欧美成人黄激情免费视频 | 欧美福利 | 中文字幕精品一区 | 国产日韩欧美在线 | 国产精品女同一区二区久久夜 | 太子妃好紧皇上好爽h | 亚洲狠狠爱 | 中文字幕一区二区三区精彩视频 | 龙珠z国语291集普通话 | 精品久久久久久久久久 | 欧美成在线观看 | 日韩精品在线播放 | 在线播放国产一区二区三区 | 免费观看一级特黄欧美大片 | 成人性大片免费观看网站 | 国产一区二区欧美 | 美女一级黄 | 久在线草| 日韩欧美一区二区在线观看视频 | 中文字幕一区二区三区乱码在线 | 欧美一卡二卡在线观看 | 欧美a级在线观看 | 久久99精品国产自在现线 | 91久久久久久久久久久久久久 | 伊人久久婷婷 | 91视频网址 | 99久久99久久精品国产片果冻 | 国产精品毛片久久久久久久 | 97碰碰碰免费公开在线视频 | 国产综合精品一区二区三区 | 国产最新视频 | 久久久国产一区二区 | 九九热免费精品视频 | 91精品国产乱码久久久久久久久 | 在线欧美亚洲 | 中文字幕一区二区三区四区不卡 | 国产亚洲一区二区三区在线观看 | 日韩av在线一区二区三区 | 一区二区视频 | 精品久久久久久久久久久久久久 | 一区二区三区在线免费观看 | 日韩1| 日本 国产 欧美 | 嫩草视频免费在线观看 | 中国一级毛片 |