日韩精品在线观看一区二区三区I亚洲欧美aI日韩欧美精品在线I激情九九I欧美一a一片一级一片I中文字幕一区二区人妻痴汉电车I日韩欧美中文字幕精品I国精产品一区一区三区免费视频I免费观看黄色avI日韩黄色成人I91呦呦I国产精品一区在线观看你懂的I久久久天堂I日韩精品国产精品I色呦呦免费观看I国产在线中文字幕I精品人人妻人人澡人人爽牛牛I狠狠做六月爱婷婷综合aⅴI无码人妻少妇伦在线电影I国产一级做a爰片久久毛片99

首頁(yè) > 新聞 > 知識(shí)賦能

[北京網(wǎng)站制作]PHP內(nèi)核介紹及擴(kuò)展開(kāi)發(fā)指南—基礎(chǔ)知識(shí)

2011-10-22 5690
分享至:

PHP內(nèi)核介紹及擴(kuò)展開(kāi)發(fā)指南—基礎(chǔ)知識(shí)

一、 基礎(chǔ)知識(shí)

  本章簡(jiǎn)要介紹一些Zend引擎的內(nèi)部機(jī)制,這些知識(shí)和Extensions密切相關(guān),同時(shí)也可以幫助我們寫(xiě)出更加高效的PHP代碼。

  1.1 PHP變量的存儲(chǔ)

  1.1.1 zval結(jié)構(gòu)

  Zend使用zval結(jié)構(gòu)來(lái)存儲(chǔ)PHP變量的值,該結(jié)構(gòu)如下所示:

  1. typedef union _zvalue_value { 
  2.     long lval;              /* long value */ 
  3.     double dval;                /* double value */ 
  4.     struct { 
  5.         char *val; 
  6.         int len; 
  7.     } str; 
  8.     HashTable *ht;              /* hash table value */ 
  9.     zend_object_value obj; 
  10. } zvalue_value; 
  11.  
  12. struct _zval_struct { 
  13.     /* Variable information */ 
  14.     zvalue_value value;     /* value */ 
  15.     zend_uint refcount; 
  16.     zend_uchar type;            /* active type */ 
  17.     zend_uchar is_ref; 
  18. }; 
  19.  
  20. typedef struct _zval_struct zval; 
  21. "more-597">Zend根據(jù)type值來(lái)決定訪問(wèn)value的哪個(gè)成員,可用值如下: 

  IS_NULLN/A

  IS_LONG對(duì)應(yīng)value.lval

  IS_DOUBLE對(duì)應(yīng)value.dval

  IS_STRING對(duì)應(yīng)value.str

  IS_ARRAY對(duì)應(yīng)value.ht

  IS_OBJECT對(duì)應(yīng)value.obj

  IS_BOOL對(duì)應(yīng)value.lval.

  IS_RESOURCE對(duì)應(yīng)value.lval

  根據(jù)這個(gè)表格可以發(fā)現(xiàn)兩個(gè)有意思的地方:首先是PHP的數(shù)組其實(shí)就是一個(gè)HashTable,這就解釋了為什么PHP能夠支持關(guān)聯(lián)數(shù)組了;其次,Resource就是一個(gè)long值,它里面存放的通常是個(gè)指針、一個(gè)內(nèi)部數(shù)組的index或者其它什么只有創(chuàng)建者自己才知道的東西,可以將其視作一個(gè)handle

  1.1.1 引用計(jì)數(shù)

  引用計(jì)數(shù)在垃圾收集、內(nèi)存池以及字符串等地方應(yīng)用廣泛,Zend就實(shí)現(xiàn)了典型的引用計(jì)數(shù)。多個(gè)PHP變量可以通過(guò)引用計(jì)數(shù)機(jī)制來(lái)共享同一份zval,zval中剩余的兩個(gè)成員is_ref和refcount就用來(lái)支持這種共享。

  很明顯,refcount用于計(jì)數(shù),當(dāng)增減引用時(shí),這個(gè)值也相應(yīng)的遞增和遞減,一旦減到零,Zend就會(huì)回收該zval。

  那么is_ref呢?

  1.1.2 zval狀態(tài)

  在PHP中,變量有兩種——引用和非引用的,它們?cè)赯end中都是采用引用計(jì)數(shù)的方式存儲(chǔ)的。對(duì)于非引用型變量,要求變量間互不相干,修改一個(gè)變量時(shí),不能影響到其他變量,采用Copy-On-Write機(jī)制即可解決這種沖突——當(dāng)試圖寫(xiě)入一個(gè)變量時(shí),Zend若發(fā)現(xiàn)該變量指向的zval被多個(gè)變量共享,則為其復(fù)制一份refcount為1的zval,并遞減原zval的refcount,這個(gè)過(guò)程稱(chēng)為“zval分離”。然而,對(duì)于引用型變量,其要求和非引用型相反,引用賦值的變量間必須是捆綁的,修改一個(gè)變量就修改了所有捆綁變量。

  可見(jiàn),有必要指出當(dāng)前zval的狀態(tài),以分別應(yīng)對(duì)這兩種情況,is_ref就是這個(gè)目的,它指出了當(dāng)前所有指向該zval的變量是否是采用引用賦值的——要么全是引用,要么全不是。此時(shí)再修改一個(gè)變量,只有當(dāng)發(fā)現(xiàn)其zval的is_ref為0,即非引用時(shí),Zend才會(huì)執(zhí)行Copy-On-Write。

  1.1.3 zval狀態(tài)切換

  當(dāng)在一個(gè)zval上進(jìn)行的所有賦值操作都是引用或者都是非引用時(shí),一個(gè)is_ref就足夠應(yīng)付了。然而,世界總不會(huì)那么美好,PHP無(wú)法對(duì)用戶進(jìn)行這種限制,當(dāng)我們混合使用引用和非引用賦值時(shí),就必須要進(jìn)行特別處理了。

  情況I、看如下PHP代碼:

  1.  

  全過(guò)程如下所示:

  這段代碼的前三句將把a(bǔ)、b和c指向一個(gè)zval,其is_ref=1, refcount=3;第四句是個(gè)非引用賦值,通常情況下只需要增加引用計(jì)數(shù)即可,然而目標(biāo)zval屬于引用變量,單純的增加引用計(jì)數(shù)顯然是錯(cuò)誤的, Zend的解決辦法是為d單獨(dú)生成一份zval副本。

  1.1.1 參數(shù)傳遞

  PHP函數(shù)參數(shù)的傳遞和變量賦值是一樣的,非引用傳遞相當(dāng)于非引用賦值,引用傳遞相當(dāng)于引用賦值,并且也有可能會(huì)導(dǎo)致執(zhí)行zval狀態(tài)切換。這在后面還將提到。

  1.2 HashTable結(jié)構(gòu)

  HashTable是Zend引擎中最重要、使用最廣泛的數(shù)據(jù)結(jié)構(gòu),它被用來(lái)存儲(chǔ)幾乎所有的東西。

  1.1.1 數(shù)據(jù)結(jié)構(gòu)

  HashTable數(shù)據(jù)結(jié)構(gòu)定義如下:

  1. typedef struct bucket { 
  2.     ulong h;                // 存放hash 
  3.     uint nKeyLength; 
  4.     void *pData;            // 指向value,是用戶數(shù)據(jù)的副本 
  5.     void *pDataPtr; 
  6.     struct bucket *pListNext;   // pListNext和pListLast組成 
  7.     struct bucket *pListLast;   // 整個(gè)HashTable的雙鏈表 
  8.     struct bucket *pNext;       // pNext和pLast用于組成某個(gè)hash對(duì)應(yīng) 
  9.     struct bucket *pLast;       // 的雙鏈表 
  10.     char arKey[1];              // key 
  11. } Bucket; 
  12.  
  13. typedef struct _hashtable { 
  14.     uint nTableSize; 
  15.     uint nTableMask; 
  16.     uint nNumOfElements; 
  17.     ulong nNextFreeElement; 
  18.     Bucket *pInternalPointer;   /* Used for element traversal */ 
  19.     Bucket *pListHead; 
  20.     Bucket *pListTail; 
  21.     Bucket **arBuckets;         // hash數(shù)組 
  22.     dtor_func_t pDestructor;    // HashTable初始化時(shí)指定,銷(xiāo)毀Bucket時(shí)調(diào)用 
  23.     zend_bool persistent;       // 是否采用C的內(nèi)存分配例程 
  24.     unsigned char nApplyCount; 
  25.     zend_bool bApplyProtection; 
  26. #if ZEND_DEBUG 
  27.     int inconsistent; 
  28. #endif 
  29. } HashTable; 

  總的來(lái)說(shuō),Zend的HashTable是一種鏈表散列,同時(shí)也為線性遍歷進(jìn)行了優(yōu)化。

  HashTable中包含兩種數(shù)據(jù)結(jié)構(gòu),一個(gè)鏈表散列和一個(gè)雙向鏈表,前者用于進(jìn)行快速鍵-值查詢,后者方便線性遍歷和排序,一個(gè)Bucket同時(shí)存在于這兩個(gè)數(shù)據(jù)結(jié)構(gòu)中。

  關(guān)于該數(shù)據(jù)結(jié)構(gòu)的幾點(diǎn)解釋?zhuān)?/p>

  l 鏈表散列中為什么使用雙向鏈表?

  一般的鏈表散列只需要按key進(jìn)行操作,只需要單鏈表就夠了。但是,Zend有時(shí)需要從鏈表散列中刪除給定的Bucket,使用雙鏈表可以非常高效的實(shí)現(xiàn)。

  l nTableMask是干什么的?

  這個(gè)值用于hash值到arBuckets數(shù)組下標(biāo)的轉(zhuǎn)換。當(dāng)初始化一個(gè)HashTable,Zend首先為arBuckets數(shù)組分配nTableSize大小的內(nèi)存,nTableSize取不小于用戶指定大小的最小的2^n,即二進(jìn)制的10*。nTableMask = nTableSize – 1,即二進(jìn)制的01*,此時(shí)h & nTableMask就恰好落在 [0, nTableSize – 1] 里,Zend就以其為index來(lái)訪問(wèn)arBuckets數(shù)組。

  l pDataPtr是干什么的?

  通常情況下,當(dāng)用戶插入一個(gè)鍵值對(duì)時(shí),Zend會(huì)將value復(fù)制一份,并將pData指向value副本。復(fù)制操作需要調(diào)用Zend內(nèi)部例程 emalloc來(lái)分配內(nèi)存,這是個(gè)非常耗時(shí)的操作,并且會(huì)消耗比value大的一塊內(nèi)存(多出的內(nèi)存用于存放cookie),如果value很小的話,將會(huì)造成較大的浪費(fèi)。考慮到HashTable多用于存放指針值,于是Zend引入pDataPtr,當(dāng)value小到和指針一樣長(zhǎng)時(shí),Zend就直接將其復(fù)制到pDataPtr里,并且將pData指向pDataPtr。這就避免了emalloc操作,同時(shí)也有利于提高Cache命中率。

  arKey大小為什么只有1?為什么不使用指針管理key?

  arKey是存放key的數(shù)組,但其大小卻只有1,并不足以放下key。在HashTable的初始化函數(shù)里可以找到如下代碼:

  1p = (Bucket *) pemalloc(sizeof(Bucket) - 1 + nKeyLength, ht->persistent);

  可見(jiàn),Zend為一個(gè)Bucket分配了一塊足夠放下自己和key的內(nèi)存,

  l 上半部分是Bucket,下半部分是key,而arKey“恰好”是Bucket的最后一個(gè)元素,于是就可以使用arKey來(lái)訪問(wèn)key了。這種手法在內(nèi)存管理例程中最為常見(jiàn),當(dāng)分配內(nèi)存時(shí),實(shí)際上是分配了比指定大小要大的內(nèi)存,多出的上半部分通常被稱(chēng)為cookie,它存儲(chǔ)了這塊內(nèi)存的信息,比如塊大小、上一塊指針、下一塊指針等,baidu的Transmit程序就使用了這種方法。

  不用指針管理key,是為了減少一次emalloc操作,同時(shí)也可以提高Cache命中率。另一個(gè)必需的理由是,key絕大部分情況下是固定不變的,不會(huì)因?yàn)閗ey變長(zhǎng)了而導(dǎo)致重新分配整個(gè)Bucket。這同時(shí)也解釋了為什么不把value也一起作為數(shù)組分配了——因?yàn)関alue是可變的。

  1.2.2 PHP數(shù)組

  關(guān)于HashTable還有一個(gè)疑問(wèn)沒(méi)有回答,就是nNextFreeElement是干什么的?

  不同于一般的散列,Zend的HashTable允許用戶直接指定hash值,而忽略key,甚至可以不指定key(此時(shí),nKeyLength為0)。同時(shí),HashTable也支持append操作,用戶連hash值也不用指定,只需要提供value,此時(shí),Zend就用nNextFreeElement作為hash,之后將nNextFreeElement遞增。

  HashTable的這種行為看起來(lái)很奇怪,因?yàn)檫@將無(wú)法按key訪問(wèn)value,已經(jīng)完全不是個(gè)散列了。理解問(wèn)題的關(guān)鍵在于,PHP數(shù)組就是使用HashTable實(shí)現(xiàn)的——關(guān)聯(lián)數(shù)組使用正常的k-v映射將元素加入HashTable,其key為用戶指定的字符串;非關(guān)聯(lián)數(shù)組則直接使用數(shù)組下標(biāo)作為hash值,不存在key;而當(dāng)在一個(gè)數(shù)組中混合使用關(guān)聯(lián)和非關(guān)聯(lián)時(shí),或者使用array_push操作時(shí),就需要用nNextFreeElement了。

  再來(lái)看value,PHP數(shù)組的value直接使用了zval這個(gè)通用結(jié)構(gòu),pData指向的是zval*,按照上一節(jié)的介紹,這個(gè)zval*將直接存儲(chǔ)在pDataPtr里。由于直接使用了zval,數(shù)組的元素可以是任意PHP類(lèi)型。

  數(shù)組的遍歷操作,即foreach、each等,是通過(guò)HashTable的雙向鏈表來(lái)進(jìn)行的,pInternalPointer作為游標(biāo)記錄了當(dāng)前位置。

  1.2.3 變量符號(hào)表

  除了數(shù)組,HashTable還被用來(lái)存儲(chǔ)許多其他數(shù)據(jù),比如,PHP函數(shù)、變量符號(hào)、加載的模塊、類(lèi)成員等。

  一個(gè)變量符號(hào)表就相當(dāng)于一個(gè)關(guān)聯(lián)數(shù)組,其key是變量名(可見(jiàn),使用很長(zhǎng)的變量名并不是個(gè)好主意),value是zval*。

  在任一時(shí)刻PHP代碼都可以看見(jiàn)兩個(gè)變量符號(hào)表——symbol_table和active_symbol_table——前者用于存儲(chǔ)全局變量,稱(chēng)為全局符號(hào)表;后者是個(gè)指針,指向當(dāng)前活動(dòng)的變量符號(hào)表,通常情況下就是全局符號(hào)表。但是,當(dāng)每次進(jìn)入一個(gè)PHP函數(shù)時(shí)(此處指的是用戶使用PHP代碼創(chuàng)建的函數(shù)),Zend都會(huì)創(chuàng)建函數(shù)局部的變量符號(hào)表,并將active_symbol_table指向局部符號(hào)表。Zend總是使用active_symbol_table來(lái)訪問(wèn)變量,這樣就實(shí)現(xiàn)了局部變量的作用域控制。

  但如果在函數(shù)局部訪問(wèn)標(biāo)記為global的變量,Zend會(huì)進(jìn)行特殊處理——在active_symbol_table中創(chuàng)建symbol_table中同名變量的引用,如果symbol_table中沒(méi)有同名變量則會(huì)先創(chuàng)建。

  1.3 內(nèi)存和文件

  程序擁有的資源一般包括內(nèi)存和文件,對(duì)于通常的程序,這些資源是面向進(jìn)程的,當(dāng)進(jìn)程結(jié)束后,操作系統(tǒng)或C庫(kù)會(huì)自動(dòng)回收那些我們沒(méi)有顯式釋放的資源。

  但是,PHP程序有其特殊性,它是基于頁(yè)面的,一個(gè)頁(yè)面運(yùn)行時(shí)同樣也會(huì)申請(qǐng)內(nèi)存或文件這樣的資源,然而當(dāng)頁(yè)面運(yùn)行結(jié)束后,操作系統(tǒng)或C庫(kù)也許不會(huì)知道需要進(jìn)行資源回收。比如,我們將php作為模塊編譯到apache里,并且以prefork或worker模式運(yùn)行apache。這種情況下apache進(jìn)程或線程是復(fù)用的,php頁(yè)面分配的內(nèi)存將永駐內(nèi)存直到出core。

  為了解決這種問(wèn)題,Zend提供了一套內(nèi)存分配API,它們的作用和C中相應(yīng)函數(shù)一樣,不同的是這些函數(shù)從Zend自己的內(nèi)存池中分配內(nèi)存,并且它們可以實(shí)現(xiàn)基于頁(yè)面的自動(dòng)回收。在我們的模塊中,為頁(yè)面分配的內(nèi)存應(yīng)該使用這些API,而不是C例程,否則Zend會(huì)在頁(yè)面結(jié)束時(shí)嘗試efree掉我們的內(nèi)存,其結(jié)果通常就是crush。

  emalloc()

  efree()

  estrdup()

  estrndup()

  ecalloc()

  erealloc()

  另外,Zend還提供了一組形如VCWD_xxx的宏用于替代C庫(kù)和操作系統(tǒng)相應(yīng)的文件API,這些宏能夠支持PHP的虛擬工作目錄,在模塊代碼中應(yīng)該總是使用它們。宏的具體定義參見(jiàn)PHP源代碼”TSRM/tsrm_virtual_cwd.h”。可能你會(huì)注意到,所有那些宏中并沒(méi)有提供close操作,這是因?yàn)閏lose的對(duì)象是已打開(kāi)的資源,不涉及到文件路徑,因此可以直接使用C或操作系統(tǒng)例程;同理,read/write之類(lèi)的操作也是直接使用C或操作系統(tǒng)的例程。

標(biāo)簽:北京網(wǎng)站制作 高端網(wǎng)站建設(shè)

來(lái)源聲明:

本文章系尚品中國(guó)編輯原創(chuàng)或采編整理,如需轉(zhuǎn)載請(qǐng)注明來(lái)自尚品中國(guó)。以上內(nèi)容部分(包含圖片、文字)來(lái)源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)及時(shí)與本站聯(lián)系(010-60259772)。

立即預(yù)約專(zhuān)屬顧問(wèn) 開(kāi)啟數(shù)字化轉(zhuǎn)型之旅!

10年+資深項(xiàng)目經(jīng)理1V1服務(wù) | 行業(yè)定制化方案 | 精準(zhǔn)報(bào)價(jià)體系
獲取策劃方案
立即預(yù)約專(zhuān)屬顧問(wèn) 開(kāi)啟數(shù)字化轉(zhuǎn)型之旅!

咨詢我們,獲得專(zhuān)業(yè)的服務(wù)和報(bào)價(jià)

聯(lián)系我們,免費(fèi)獲取項(xiàng)目方案及報(bào)價(jià),或只是聊一聊您的項(xiàng)目? 在收到您的需求留言后我們將由專(zhuān)業(yè)人員于24小時(shí)內(nèi)與您取得聯(lián)系,請(qǐng)您保持電話暢通!

  • 科研院所解決方案
  • 外貿(mào)出海解決方案
  • 協(xié)會(huì)學(xué)會(huì)解決方案
  • 集團(tuán)上市公司解決方案
  • 生物醫(yī)藥解決方案
  • 制造業(yè)解決方案
  • 高校教育解決方案
  • 信創(chuàng)網(wǎng)站改造解決方案
更多服務(wù)咨詢,請(qǐng)聯(lián)系尚品

010-60259772

您的姓名 *
您的電話 *
您的郵箱
公司名稱(chēng) *
主站蜘蛛池模板: 一 级 黄 色 片免费看的 | 欧美韩国日本在线观看 | 97在线观看免费视频 | 国产高清不卡一区二区三区 | 中文字幕在线观看完整版 | 黄色大全在线观看 | 最新中文字幕在线观看视频 | 午夜美女福利直播 | 午夜精品一区二区三区在线观看 | 欧美精品久久久久久久久老牛影院 | 深夜激情影院 | 国产精品综合av一区二区国产馆 | 四虎成人精品 | 天天射成人 | 亚洲电影久久久 | 这里只有精品视频在线观看 | 亚洲va欧洲va国产va不卡 | 九色最新网址 | 永久免费毛片在线观看 | 色婷婷久久 | 在线播放亚洲激情 | 国产精品免费观看国产网曝瓜 | 99热超碰| 久久久久久免费视频 | 久草精品电影 | 日韩视频一二三区 | 欧美日韩一区二区三区视频 | 日韩视频一区二区 | 在线观看网站黄 | 九九精品久久 | 91资源在线视频 | 天天操天天操天天操天天操天天操 | 天天操天天草 | 青草视频在线看 | 丁香六月婷 | a级片久久久| 久久香蕉影视 | 国产视频二区三区 | 97操操操| 91麻豆精品国产自产 | av黄色av | 国产一区二区观看 | 国产视频2 | 激情av资源网 | 在线观看www视频 | 国产喷水在线 | 天天玩天天操天天射 | 免费观看成人网 | 国产一级片在线播放 | 99视频在线精品免费观看2 | 香蕉视频免费在线播放 | 在线免费观看的av | va视频在线 | 久久久网站 | 99热国产在线观看 | 久久a热6| 久久视频精品在线观看 | 日韩中文字幕在线看 | 波多野结衣在线播放视频 | 成人影音在线 | 96av麻豆蜜桃一区二区 | 日韩精品一区二区久久 | 久久久久久在线观看 | 国产精品美女久久久久久久网站 | 91视频久久 | 在线观看av中文字幕 | 欧美激情视频一区 | 国产亚洲久一区二区 | 婷婷色综合 | 久久久久久草 | 欧美激情一区不卡 | 国产精品久久久久久a | 免费看日韩 | 国产香蕉97碰碰久久人人 | 日韩区欠美精品av视频 | 欧美日韩高清免费 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 国产糖心vlog在线观看 | 在线电影 你懂得 | 亚洲国产精品va在线看黑人 | 香蕉影视app| 97高清视频 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 91高清免费| 亚洲欧美激情精品一区二区 | 97视频资源 | 成年人在线看视频 | 日韩电影在线观看一区二区三区 | 91高清完整版在线观看 | 黄色高清视频在线观看 | 在线视频app | 高清视频一区二区三区 | 成人在线视频论坛 | 中文字幕一区二区在线观看 | 亚洲精品视频在线免费 | 国产精品久久精品 | 色婷婷综合久久久久中文字幕1 | 粉嫩aⅴ一区二区三区 | 日韩久久视频 | 麻豆视频免费入口 | 福利一区二区三区四区 | 国产精品一区二区免费 | 91九色蝌蚪国产 | 国产高清小视频 | 五月婷婷深开心 | 亚洲狠狠婷婷 | 一区二区三区中文字幕在线观看 | 最新国产精品久久精品 | 一区二区三区在线免费 | 高清不卡免费视频 | 日本视频久久久 | 久久久国产精品一区二区三区 | 精品伊人久久久 | 五月婷婷丁香在线观看 | 激情综合久久 | 在线观看网站av | 亚洲日本精品视频 | 黄色av免费电影 | 在线视频电影 | 亚洲永久精品一区 | 免费看国产精品 | 99热在线这里只有精品 | 久久亚洲综合色 | 成人在线免费视频观看 | 国产精品久久一区二区无卡 | 夜夜夜草| 国产日韩欧美在线免费观看 | 亚洲色图av | 在线观看中文av | 一区中文字幕电影 | 成人av资源站| 色www免费视频 | 韩国精品一区二区三区六区色诱 | 亚洲国产精品传媒在线观看 | 婷婷综合导航 | 亚洲va欧美 | 久久婷婷激情 | 日韩精品免费一区二区在线观看 | 日韩高清在线不卡 | 国内视频在线 | 99国产精品免费网站 | 中文字幕av在线播放 | 五月天电影免费在线观看一区 | 亚洲人天堂 | 免费网站在线观看人 | 久久久久国产精品一区 | 99热精品国产 | 国产精品欧美久久久久天天影视 | 中文一区在线 | 日本久久综合视频 | 久草在线视频在线 | 99免费在线视频 | 一级免费av| 午夜色影院 | 在线看不卡av | 精品国产视频一区 | 西西大胆啪啪 | www国产亚洲精品久久网站 | 亚洲国产精品成人av | 在线观看一级片 | 深夜免费小视频 | 探花视频在线版播放免费观看 | 欧美日韩在线免费观看视频 | 国产日韩在线播放 | 狠狠狠狠狠操 | 蜜臀av性久久久久蜜臀av | 91精品国产99久久久久 | 亚洲精品在线观看不卡 | 91免费观看国产 | 国产精品美女久久久久久免费 | 开心激情网五月天 | 91爱爱中文字幕 | a国产精品 | 欧美一区二区在线 | 中文国产在线观看 | wwwwwww色| 香蕉视频在线免费 | 国产 日韩 欧美 在线 | 一区二区三区四区免费视频 | 中文区中文字幕免费看 | 国产视频一区二区在线 | 奇米网网址 | 国产一区二区三区在线 | 91精品国产综合久久婷婷香蕉 | 国产99久久精品一区二区永久免费 | 日韩在线观看 | 免费看的国产视频网站 | 午夜电影久久 | 丁香激情婷婷 | 国产精品 国内视频 | 99精彩视频在线观看免费 | 国产黄在线播放 | 久久69精品久久久久久久电影好 | 91精品久久久久久粉嫩 | 亚洲精品乱码久久久久v最新版 | 色偷偷88欧美精品久久久 | 成人中心免费视频 | 亚洲九九九在线观看 | 亚洲精品2区 | 丁香免费视频 | 婷婷六月在线 | 人人射人人爽 | 欧美做受xxx | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲精品456在线播放第一页 | 婷婷色在线 | 成人片在线播放 | 午夜精品久久久久久久99无限制 | 全久久久久久久久久久电影 | 久久a v视频| 亚洲精品看片 | 国产精品嫩草影视久久久 | 人人干狠狠操 | 国产精品高潮呻吟久久久久 | 久久人人爽人人爽人人片av软件 | 美女黄网久久 | 日韩精品欧美视频 | 麻豆传媒电影在线观看 | 精品国偷自产在线 | 久久这里有 | 国产免费一区二区三区最新6 | 91免费观看国产 | 欧美另类调教 | 91麻豆网 | 日韩视频欧美视频 | 色综合激情网 | 黄色一级免费 | 操久久网 | 91视频观看免费 | 久久成人国产 | 国产精品午夜在线 | 91成人精品一区在线播放 | 日韩中文字幕在线观看 | 91成人精品一区在线播放69 | 免费视频黄色 | 色先锋资源网 | 日韩欧美在线观看 | 欧美另类交在线观看 | 国产精品美女999 | 蜜臀av性久久久久av蜜臀妖精 | 日本公妇色中文字幕 | 中文字幕在线视频免费播放 | 人人揉人人揉人人揉人人揉97 | 超碰97人人爱 | 美女视频黄网站 | 欧美一级在线观看视频 | 欧美伦理电影一区二区 | 97视频在线看 | 91最新地址永久入口 | 亚洲精品国久久99热 | 久久精品5| 伊人影院在线观看 | 久久免费视频99 | 日本中文字幕在线播放 | 亚洲成人av影片 | 怡红院av久久久久久久 | 久久久黄视频 | 国产一区二区三区视频在线 | 2024国产精品视频 | 五月丁婷婷 | 在线v片免费观看视频 | 久久高清毛片 | 色亚洲激情 | 日韩欧美在线观看一区 | 久久热亚洲 | 天天爱天天操天天干 | 中文字幕在线免费看线人 | 欧美综合在线视频 | 婷婷中文字幕 | 久久天天综合网 | 免费久久片| 免费网站在线观看成人 | 国产亚洲婷婷 | 黄色av免费在线 | 国产成人精品在线观看 | 久九视频 | 久久人人爽人人爽人人片av免费 | 亚洲成人av片在线观看 | 97国产情侣爱久久免费观看 | 久久综合久久久 | 香蕉久久国产 | 91污污视频在线观看 | 手机av电影在线观看 | 国产在线a视频 | 亚洲91中文字幕无线码三区 | 欧美在线一二 | 天天天干夜夜夜操 | av日韩国产 | 特黄特色特刺激视频免费播放 | 97人人爽人人 | 精品一区二区6 | 天天做天天看 | 久久大片 | 美女精品久久 | 久久久久久久久久久成人 | 欧美一二三区在线播放 | 久久婷婷开心 | 日韩免费在线播放 | 一级片免费观看视频 | 成年人三级网站 | 在线97| 91av电影| 国产1级毛片 | 丁香六月婷 | 国产精品a久久 | 久久久久久久免费 | 91在线操| 午夜在线看 | 午夜av在线免费 | 日韩18p| 三日本三级少妇三级99 | 久精品一区 | 日韩精品一区二区三区丰满 | 久久视奸 | 美女网色 | 国产精品综合久久久久 | 美女网站在线免费观看 | 精品亚洲男同gayvideo网站 | 91精品久久久久久综合乱菊 | 韩日视频在线 | 91视视频在线直接观看在线看网页在线看 | 丁香婷婷综合激情五月色 | 精品国产视频在线观看 | 欧美日韩中文在线 | 91精品国产自产91精品 | 在线亚洲午夜片av大片 | 色七七亚洲影院 | 91视频国产免费 | 成年人免费观看在线视频 | 狠狠操在线 | 久久伦理电影 | 超碰在线中文字幕 | 国产黄色免费电影 | 天天操天天射天天舔 | 高清av免费看| 日韩免费一级电影 | 亚洲国产日韩一区 | 99精品99| 五月婷色| 韩国一区二区av | 日韩精品视频在线观看免费 | 亚洲激精日韩激精欧美精品 | 最近免费在线观看 | 亚洲精品午夜aaa久久久 | 天天天色综合 | 久久成 | 97理论电影 | 国产中文欧美日韩在线 | 二区三区在线观看 | 色婷婷www | 日韩视频在线观看视频 | 91精品网站| 骄小bbw搡bbbb揉bbbb | 国产精品成人免费一区久久羞羞 | 黄色av影视 | 日本精品久久久久中文字幕 | 91精品办公室少妇高潮对白 | 九九九热精品免费视频观看网站 | 在线观看av黄色 | 亚洲成人av在线 | 久操视频在线免费看 | 亚洲美女在线国产 | 高清国产一区 | 国产99精品 | 亚洲精品白浆高清久久久久久 | 黄色精品一区二区 | 国产第一福利网 | 国产原创91| 久久色视频| 久久国产精品99久久久久久进口 | 天天摸天天舔天天操 | 婷婷丁香国产 | 国产精品高潮久久av | 大荫蒂欧美视频另类xxxx | 黄色在线观看网站 | 欧美性高跟鞋xxxxhd | 99精品国产兔费观看久久99 | 久久精品高清视频 | 视频国产| 国产精品久久久久一区二区 | 夜夜看av| 国产喷水在线 | 911香蕉| 成人丁香花 | 久久亚洲影视 | 免费观看91视频 | 久久综合久久伊人 | 日本韩国精品一区二区在线观看 | 99精彩视频在线观看免费 | 免费在线观看av网址 | 日韩精品免费一线在线观看 | 永久av免费在线观看 | 亚洲精品女人久久久 | 超碰在线免费福利 | 久久大香线蕉app | 日日操天天射 | 亚洲精品国偷自产在线91正片 | 天天艹天天爽 | 四虎成人av | 久久久综合色 | 天天操夜夜操天天射 | 日韩欧美在线国产 | 黄色一级在线免费观看 | 精品女同一区二区三区在线观看 | 免费观看性生活大片 | 成人在线一区二区 | 欧美日韩高清在线观看 | 亚洲区精品视频 | 黄色国产高清 | 欧美国产日韩一区二区三区 | 久久久久久看片 | 亚洲国产无 | 99精品国产在热久久下载 | 欧美九九视频 | 国产探花视频在线播放 | 国产婷婷精品av在线 | 国产看片免费 | 91在线91 | 欧美日韩国产xxx | 久久特级毛片 | 久久久久草 | 免费看污污视频的网站 | 毛片基地黄久久久久久天堂 | 国产精品18久久久久白浆 | 久久福利影视 | 久久综合久久鬼 | 四虎成人av | 99精品视频免费观看视频 | 国产高h视频 | 美女视频永久黄网站免费观看国产 | 色婷婷狠狠五月综合天色拍 | 在线观看中文字幕网站 | 久久精品久久久久久久 | 91秒拍国产福利一区 | 看黄色.com| 久久久久中文 | 婷婷激情在线 | 天天干天天干天天射 | 蜜臀av.com | 久久精品视频在线观看 | 色妞色视频一区二区三区四区 | 国产在线观看高清视频 | 色悠悠久久综合 | 在线视频 亚洲 | 成年人电影毛片 | 香蕉看片 | 精品国模一区二区 | 天天干天天操人体 | 一区二区三区观看 | 在线免费黄网站 | 日韩精品最新在线观看 | adc在线观看| 亚州精品在线视频 | 深夜免费福利在线 | 夜夜躁日日躁狠狠久久av | 精品欧美一区二区精品久久 | 国产成人久久 | 久99久在线 | 91chinesexxx| 欧美性极品xxxx娇小 | 久久精品一区二区三区视频 | 日韩高清在线一区二区三区 | 在线观看av免费 | 五月婷婷色丁香 | 少妇视频一区 | 美女网站色在线观看 | 欧美一级黄色片 | 狠狠躁夜夜躁人人爽超碰91 | 婷婷色在线播放 | 欧美一区二区在线看 | 美女在线国产 | 精品高清美女精品国产区 | 精品欧美一区二区三区久久久 | 久草视频中文 | 国产精品中文在线 | 国产精品网在线观看 | 久久成人人人人精品欧 | av在线8 | 免费福利视频网站 | 黄污网站在线 | 久久久性 | 中文字幕黄色网址 | 91丨九色丨高潮丰满 | 在线 影视 一区 | 久久精品久久精品久久精品 | 一级做a爱片性色毛片www | 国产伦精品一区二区三区… | 亚洲精色| 国产精品一区二区无线 | 国产精品美女在线观看 | 久久女同性恋中文字幕 | 涩涩爱夜夜爱 | 国产综合在线视频 | 亚洲成人999| 欧美精品做受xxx性少妇 | 粉嫩av一区二区三区四区五区 | 亚洲精品国产高清 | 一本到视频在线观看 | 91久久丝袜国产露脸动漫 | 一区二区三区国产精品 |