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

伙伴分配器的一個極簡實(shí)現(xiàn)

開發(fā) 項(xiàng)目管理 前端
提起buddy system相信很多人不會陌生,它是一種經(jīng)典的內(nèi)存分配算法,大名鼎鼎的Linux底層的內(nèi)存管理用的就是它。這里不探討內(nèi)核這么復(fù)雜實(shí)現(xiàn),而僅僅是將該算法抽象提取出來,同時給出一份及其簡潔的源碼實(shí)現(xiàn),以便定制擴(kuò)展。

提起buddy system相信很多人不會陌生,它是一種經(jīng)典的內(nèi)存分配算法,大名鼎鼎的Linux底層的內(nèi)存管理用的就是它。這里不探討內(nèi)核這么復(fù)雜實(shí)現(xiàn),而僅僅是將該算法抽象提取出來,同時給出一份及其簡潔的源碼實(shí)現(xiàn),以便定制擴(kuò)展。

伙伴分配的實(shí)質(zhì)就是一種特殊的“分離適配”,即將內(nèi)存按2的冪進(jìn)行劃分,相當(dāng)于分離出若干個塊大小一致的空閑鏈 表,搜索該鏈表并給出同需求最佳匹配的大小。其優(yōu)點(diǎn)是快速搜索合并(O(logN)時間復(fù)雜度)以及低外部碎片(最佳適配best-fit);其缺點(diǎn)是內(nèi) 部碎片,因?yàn)榘?的冪劃分塊,如果碰上66單位大小,那么必須劃分128單位大小的塊。但若需求本身就按2的冪分配,比如可以先分配若干個內(nèi)存池,在其基 礎(chǔ)上進(jìn)一步細(xì)分就很有吸引力了。

可以在維基百科上找到該算法的描述,大體如是:

分配內(nèi)存:

1.尋找大小合適的內(nèi)存塊(大于等于所需大小并且最接近2的冪,比如需要27,實(shí)際分配32)

  1. .如果找到了,分配給應(yīng)用程序。
  2. 如果沒找到,分出合適的內(nèi)存塊。
    1. .對半分離出高于所需大小的空閑內(nèi)存塊
    2. .如果分到最低限度,分配這個大小。
    3. 回溯到步驟1(尋找合適大小的塊)
    4. .重復(fù)該步驟直到一個合適的塊

 

釋放內(nèi)存:

1.釋放該內(nèi)存塊

  1. 尋找相鄰的塊,看其是否釋放了。
  2. 如果相鄰塊也釋放了,合并這兩個塊,重復(fù)上述步驟直到遇上未釋放的相鄰塊,或者達(dá)到最高上限(即所有內(nèi)存都釋放了)。

上面這段文字對你來說可能看起來很費(fèi)勁,沒事,我們看個內(nèi)存分配和釋放的示意圖你就知道了:

上圖中,首先我們假設(shè)我們一個內(nèi)存塊有1024K,當(dāng)我們需要給A分配70K內(nèi)存的時候,

  1. 我們發(fā)現(xiàn)1024K的一半大于70K,然后我們就把1024K的內(nèi)存分成兩半,一半512K。
  2. 然后我們發(fā)現(xiàn)512K的一半仍然大于70K,于是我們再把512K的內(nèi)存再分成兩半,一半是128K。
  3. 此時,我們發(fā)現(xiàn)128K的一半小于70K,于是我們就分配為A分配128K的內(nèi)存。

后面的,B,C,D都這樣,而釋放內(nèi)存時,則會把相鄰的塊一步一步地合并起來(合并也必需按分裂的逆操作進(jìn)行合并)。

我們可以看見,這樣的算法,用二叉樹這個數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)再合適不過了。

我在網(wǎng)上分別找到cloudwu和wuwenbin寫的兩份開源實(shí)現(xiàn)和測試用例。實(shí)際上后一份是對前一份的精簡和優(yōu)化,本文打算從后一份入手講解,因?yàn)檫@份實(shí)現(xiàn)真正體現(xiàn)了“極簡”二字,追求突破常規(guī)的,極致簡單的設(shè)計(jì)。網(wǎng)友對其評價甚高,甚至可用作教科書標(biāo)準(zhǔn)實(shí)現(xiàn),看完之后回過頭來看cloudwu的代碼就容易理解了。

分配器的整體思想是,通過一個數(shù)組形式的完全二叉樹來監(jiān)控管理內(nèi)存,二叉樹的節(jié)點(diǎn)用于標(biāo)記相應(yīng)內(nèi)存塊的使用狀態(tài),高層節(jié)點(diǎn)對應(yīng)大的塊,低層節(jié)點(diǎn)對應(yīng) 小的塊,在分配和釋放中我們就通過這些節(jié)點(diǎn)的標(biāo)記屬性來進(jìn)行塊的分離合并。如圖所示,假設(shè)總大小為16單位的內(nèi)存,我們就建立一個深度為5的滿二叉樹,根 節(jié)點(diǎn)從數(shù)組下標(biāo)[0]開始,監(jiān)控大小16的塊;它的左右孩子節(jié)點(diǎn)下標(biāo)[1~2],監(jiān)控大小8的塊;第三層節(jié)點(diǎn)下標(biāo)[3~6]監(jiān)控大小4的塊……依此類推。

在分配階段,首先要搜索大小適配的塊,假設(shè)第一次分配3,轉(zhuǎn)換成2的冪是4,我們先要對整個內(nèi)存進(jìn)行對半切割,從16切割到4需要兩步,那么從下標(biāo) [0]節(jié)點(diǎn)開始深度搜索到下標(biāo)[3]的節(jié)點(diǎn)并將其標(biāo)記為已分配。第二次再分配3那么就標(biāo)記下標(biāo)[4]的節(jié)點(diǎn)。第三次分配6,即大小為8,那么搜索下標(biāo) [2]的節(jié)點(diǎn),因?yàn)橄聵?biāo)[1]所對應(yīng)的塊被下標(biāo)[3~4]占用了。

在釋放階段,我們依次釋放上述第一次和第二次分配的塊,即先釋放[3]再釋放[4],當(dāng)釋放下標(biāo)[4]節(jié)點(diǎn)后,我們發(fā)現(xiàn)之前釋放的[3]是相鄰的, 于是我們立馬將這兩個節(jié)點(diǎn)進(jìn)行合并,這樣一來下次分配大小8的時候,我們就可以搜索到下標(biāo)[1]適配了。若進(jìn)一步釋放下標(biāo)[2],同[1]合并后整個內(nèi)存 就回歸到初始狀態(tài)。

還是看一下源碼實(shí)現(xiàn)吧,首先是伙伴分配器的數(shù)據(jù)結(jié)構(gòu):

  1. struct buddy2 { 
  2.   unsigned size; 
  3.   unsigned longest[1]; 
  4. }; 

這里的成員size表明管理內(nèi)存的總單元數(shù)目(測試用例中是32),成員longest就是二叉樹的節(jié)點(diǎn)標(biāo)記,表明所對應(yīng)的內(nèi)存塊的空閑單位,在下文中會分析這是整個算法中最精妙的設(shè)計(jì)。此處數(shù)組大小為1表明這是可以向后擴(kuò)展的(注:在GCC環(huán)境下你可以寫成longest[0],不占用空間,這里是出于可移植性考慮),我們在分配器初始化的buddy2_new可以看到這種用法。

  1. truct buddy2* buddy2_new( int size ) { 
  2.   struct buddy2* self; 
  3.   unsigned node_size; 
  4.   int i; 
  5.   
  6.   if (size < 1 || !IS_POWER_OF_2(size)) 
  7.     return NULL; 
  8.   
  9.   self = (struct buddy2*)ALLOC( 2 * size * sizeof(unsigned)); 
  10.   self->size = size; 
  11.   node_size = size * 2; 
  12.   
  13.   for (i = 0; i < 2 * size - 1; ++i) { 
  14.     if (IS_POWER_OF_2(i+1)) 
  15.       node_size /= 2; 
  16.     self->longest[i] = node_size; 
  17.   } 
  18.   return self; 

整個分配器的大小就是滿二叉樹節(jié)點(diǎn)數(shù)目,即所需管理內(nèi)存單元數(shù)目的2倍。一個節(jié)點(diǎn)對應(yīng)4個字節(jié),longest記錄了節(jié)點(diǎn)所對應(yīng)的的內(nèi)存塊大小。

內(nèi)存分配的alloc中,入?yún)⑹欠峙淦髦羔樅托枰峙涞拇笮。祷刂凳莾?nèi)存塊索引。alloc函數(shù)首先將size調(diào)整到2的冪大小,并檢查是否超過最大限度。然后進(jìn)行適配搜索,深度優(yōu)先遍歷,當(dāng)找到對應(yīng)節(jié)點(diǎn)后,將其longest標(biāo)記為0,即分離適配的塊出來,并轉(zhuǎn)換為內(nèi)存塊索引offset返回,依據(jù)二叉樹排列序號,比如內(nèi)存總體大小32,我們找到節(jié)點(diǎn)下標(biāo)[8],內(nèi)存塊對應(yīng)大小是4,則offset = (8+1)*4-32 = 4,那么分配內(nèi)存塊就從索引4開始往后4個單位。

  1. int buddy2_alloc(struct buddy2* self, int size) { 
  2.   unsigned index = 0; 
  3.   unsigned node_size; 
  4.   unsigned offset = 0; 
  5.   
  6.   if (self==NULL) 
  7.     return -1; 
  8.   
  9.   if (size <= 0) 
  10.     size = 1; 
  11.   else if (!IS_POWER_OF_2(size)) 
  12.     size = fixsize(size); 
  13.   
  14.   if (self->longest[index] < size) 
  15.     return -1; 
  16.   
  17.   for(node_size = self->size; node_size != size; node_size /= 2 ) { 
  18.     if (self->longest[LEFT_LEAF(index)] >= size) 
  19.       index = LEFT_LEAF(index); 
  20.     else 
  21.       index = RIGHT_LEAF(index); 
  22.   } 
  23.   
  24.   self->longest[index] = 0; 
  25.   offset = (index + 1) * node_size - self->size; 
  26.   
  27.   while (index) { 
  28.     index = PARENT(index); 
  29.     self->longest[index] = 
  30.       MAX(self->longest[LEFT_LEAF(index)], self->longest[RIGHT_LEAF(index)]); 
  31.   } 
  32.   
  33.   return offset; 

在函數(shù)返回之前需要回溯,因?yàn)樾K內(nèi)存被占用,大塊就不能分配了,比如下標(biāo)[8]標(biāo)記為0分離出來,那么其父節(jié)點(diǎn)下標(biāo)[0]、[1]、[3]也需要相應(yīng)大小的分離。將它們的longest進(jìn)行折扣計(jì)算,取左右子樹較大值,下標(biāo)[3]取4,下標(biāo)[1]取8,下標(biāo)[0]取16,表明其對應(yīng)的最大空閑值。

在內(nèi)存釋放的free接口,我們只要傳入之前分配的內(nèi)存地址索引,并確保它是有效值。之后就跟alloc做反向回溯,從最后的節(jié)點(diǎn)開始一直往上找到longest為0的節(jié)點(diǎn),即當(dāng)初分配塊所適配的大小和位置。我們將longest恢復(fù)到原來滿狀態(tài)的值。繼續(xù)向上回溯,檢查是否存在合并的塊,依據(jù)就是左右子樹longest的值相加是否等于原空閑塊滿狀態(tài)的大小,如果能夠合并,就將父節(jié)點(diǎn)longest標(biāo)記為相加的和(多么簡單!)。

  1. void buddy2_free(struct buddy2* self, int offset) { 
  2.   unsigned node_size, index = 0; 
  3.   unsigned left_longest, right_longest; 
  4.   
  5.   assert(self && offset >= 0 && offset < size); 
  6.   
  7.   node_size = 1; 
  8.   index = offset + self->size - 1; 
  9.   
  10.   for (; self->longest[index] ; index = PARENT(index)) { 
  11.     node_size *= 2; 
  12.     if (index == 0) 
  13.       return
  14.   } 
  15.   
  16.   self->longest[index] = node_size; 
  17.   
  18.   while (index) { 
  19.     index = PARENT(index); 
  20.     node_size *= 2; 
  21.   
  22.     left_longest = self->longest[LEFT_LEAF(index)]; 
  23.     right_longest = self->longest[RIGHT_LEAF(index)]; 
  24.   
  25.     if (left_longest + right_longest == node_size) 
  26.       self->longest[index] = node_size; 
  27.     else 
  28.       self->longest[index] = MAX(left_longest, right_longest); 
  29.   } 

上面兩個成對alloc/free接口的時間復(fù)雜度都是O(logN),保證了程序運(yùn)行性能。然而這段程序設(shè)計(jì)的獨(dú)特之處就在于使用加權(quán)來標(biāo)記內(nèi)存空閑狀態(tài),而不是一般的有限狀態(tài)機(jī),實(shí)際上longest既可以表示權(quán)重又可以表示狀態(tài),狀態(tài)機(jī)就毫無必要了,所謂“少即是多”嘛!反 觀cloudwu的實(shí)現(xiàn),將節(jié)點(diǎn)標(biāo)記為UNUSED/USED/SPLIT/FULL四個狀態(tài)機(jī),反而會帶來額外的條件判斷和管理實(shí)現(xiàn),而且還不如數(shù)值那 樣精確。從邏輯流程上看,wuwenbin的實(shí)現(xiàn)簡潔明了如同教科書一般,特別是左右子樹的走向,內(nèi)存塊的分離合并,塊索引到節(jié)點(diǎn)下標(biāo)的轉(zhuǎn)換都是一步到 位,不像cloudwu充斥了大量二叉樹的深度和長度的間接計(jì)算,讓代碼變得晦澀難讀,這些都是longest的功勞。一個“極簡”的設(shè)計(jì)往往在于你想不到的突破常規(guī)思維的地方。

這份代碼唯一的缺陷就是longest的大小是4字節(jié),內(nèi)存消耗大。但cloudwu的博客上有人提議用logN來保存值,這樣就能實(shí)現(xiàn)uint8_t大小了,看,又是一個“極簡”的設(shè)計(jì)!

說實(shí)話,很難在網(wǎng)上找到比這更簡約更優(yōu)雅的buddy system實(shí)現(xiàn)了——至少在Google上如此。

原文鏈接:

譯文鏈接:

責(zé)任編輯:陳四芳 來源: 酷殼網(wǎng)
相關(guān)推薦

2013-10-12 11:15:09

Linux運(yùn)維內(nèi)存管理

2024-10-11 10:00:20

2025-02-10 07:30:00

malloc內(nèi)存分配器內(nèi)存

2009-12-25 15:34:54

slab分配器

2021-08-03 09:02:58

LinuxSlab算法

2025-04-11 00:44:00

2024-12-11 08:18:11

2023-04-03 08:25:02

Linux內(nèi)存slub

2017-01-20 14:21:35

內(nèi)存分配器存儲

2017-01-17 16:17:48

C++固定分配器

2017-02-08 08:40:21

C++固定內(nèi)存塊

2020-12-15 08:54:06

Linux內(nèi)存碎片化

2025-05-27 02:45:45

2020-03-11 13:44:20

編程語言PythonJava

2023-04-13 14:42:26

PoE供電器PoE交換機(jī)

2024-10-28 11:25:21

豐巢快遞jemalloc

2022-02-18 11:51:36

Python代碼編程語言

2017-04-26 15:49:04

NOS交換機(jī)網(wǎng)絡(luò)

2021-05-27 05:28:18

Linux 內(nèi)存管理

2014-09-01 10:09:44

Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产精品蜜臀| 精品国产av 无码一区二区三区| 成人av动漫| 狠狠爱在线视频一区| 一区二区免费在线视频| 亚洲经典一区二区三区| 久久中文在线| 欧美激情国产高清| 亚洲色图100p| 少妇精品导航| 日韩一区二区电影网| 国产l精品国产亚洲区久久| 巨大荫蒂视频欧美大片| 91捆绑美女网站| 51国偷自产一区二区三区的来源 | 国产精品一区二区三区在线播放| 丁香花五月激情| blacked蜜桃精品一区| 精品国产3级a| 中文字幕资源在线观看| 亚洲精品一区| 亚洲午夜精品在线| 99久久久无码国产精品性色戒| 天天干天天舔天天射| 国产乱子轮精品视频| 国产精品国产三级国产专播精品人 | 国产成人免费av一区二区午夜 | 免费在线激情视频| 日本aa在线| 亚洲日本青草视频在线怡红院| 蜜桃导航-精品导航| 丰满熟女一区二区三区| 在线观看黄色国产| av免费不卡| 亚洲精品日韩专区silk| 午夜老司机精品| 日本a一级在线免费播放| 成人性色生活片免费看爆迷你毛片| 国产美女主播一区| 久久国产黄色片| 国语自产在线不卡| 黄色一级视频播放| av中文在线| 久久嫩草精品久久久久| 国产精品永久入口久久久| a级片在线播放| 精彩视频一区二区| 成人激情综合网| 伊人网中文字幕| 青青草97国产精品免费观看| 日本免费久久高清视频| wwwxxx亚洲| 国产精品视频久久一区| 91精品国产一区| 国产无遮挡又黄又爽又色| 欧美日韩免费观看一区=区三区| 精品国产一区久久久| 成人无码精品1区2区3区免费看 | www免费在线观看| ●精品国产综合乱码久久久久| 一本久久a久久精品vr综合| aaa在线观看| 国产精品欧美极品| 综合一区中文字幕| 成人av黄色| 亚洲国产中文字幕在线视频综合| 日韩欧美不卡在线| 蜜桃视频在线观看免费视频| 欧美性猛交xxxx偷拍洗澡| 精品久久久久av| 国产精品第一| 日韩一区二区三区免费观看| 中文字幕人妻一区| 亚洲欧洲美洲国产香蕉| 伊人男人综合视频网| 免费黄色国产视频| 国产精品s色| 51色欧美片视频在线观看| 国产91国语对白在线| 蜜臀久久99精品久久久画质超高清| 国产精品美女免费| 国产人妖在线播放| av电影在线观看不卡| 日韩av电影免费在线| 日本福利在线| 亚洲v精品v日韩v欧美v专区| 亚洲国产精品毛片av不卡在线| 久久精品国产福利| 亚洲国产精品高清久久久| 变态另类ts人妖一区二区| 国产精品99在线观看| 欧美激情伊人电影| 中文字幕在线日亚洲9| 国产一区二区三区黄视频 | 一广人看www在线观看免费视频| 国产精品久久久一本精品| 久久综合亚洲精品| 欧美电影网址| 欧美成人一区二区三区在线观看| 国产吞精囗交久久久| 天天超碰亚洲| 日本免费一区二区三区视频观看| 国产视频在线观看免费| 91蝌蚪porny| 国产人妻人伦精品| 一二区成人影院电影网| 日韩一区二区三区四区 | 亚洲精品中文在线影院| 啊啊啊一区二区| 超碰国产精品一区二页| 日韩不卡中文字幕| www.超碰在线观看| 日本中文字幕一区| 精品国产一区二区三区麻豆小说| 91女主播在线观看| 视频精品在线观看| 日本一区二区免费在线观看视频 | 成人av播放| 国产中文字幕在线播放| 亚洲地区一二三色| 亚洲天堂网2018| 欧美极品在线观看| 97久久国产精品| 高h放荡受浪受bl| 中文字幕一区二区三区在线不卡 | 亚洲一区3d动漫同人无遮挡 | 一区二区三区福利| 91精品国产高清久久久久久91裸体| 国产乱理伦片a级在线观看| 亚洲成人在线网站| 国产精九九网站漫画| 亚洲最新av| 91精品国产综合久久久久久久久| 黄视频在线观看免费| 亚洲va国产天堂va久久en| 男人操女人下面视频| 久久网站免费观看| 国产精品美女久久久久久免费 | 中文字幕乱码久久午夜不卡 | 久久影视精品| 最近2019中文免费高清视频观看www99 | 在线欧美一区| 99久久久久国产精品免费 | 97婷婷大伊香蕉精品视频| 黄色三级网站在线观看| 亚洲一卡二卡三卡四卡| 中文在线字幕观看| 亚洲一级二级| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | av不卡一区二区三区| 成人黄色av片| 在线一级成人| 国产精品久久在线观看| 91成人高清| 欧美美女黄视频| www欧美com| 国产高清不卡二三区| 欧美性猛交内射兽交老熟妇| 99久久人爽人人添人人澡| 欧美精品第一页在线播放| 性生活视频软件| 性做久久久久久免费观看| 中文字幕高清视频| 奇米一区二区三区av| 在线成人性视频| 日韩欧美激情电影| 97久久久免费福利网址| 头脑特工队2在线播放| 色爱区综合激月婷婷| 欧美性猛交xxxx乱大交少妇| 国产最新精品精品你懂的| 久久久久久久久久久久久国产| 97久久综合精品久久久综合| 97视频在线免费观看| 国产女主播在线直播| 6080亚洲精品一区二区| 国产无码精品一区二区| 久久久久国色av免费看影院| 欧美国产日韩另类 | 国产不卡av在线免费观看| 97电影在线看视频| 日韩色视频在线观看| 成人精品在线看| 国产欧美精品一区| 女人扒开双腿让男人捅| 亚洲在线电影| 中文字幕色一区二区| 国产一区二区三区亚洲| 国产极品jizzhd欧美| 色呦呦在线观看视频| 精品调教chinesegay| 国产精品久久久久久69| 天天操天天色综合| 殴美一级黄色片| eeuss影院一区二区三区| 久久久久久久久久久久91| 影音先锋在线一区| 一区二区不卡在线视频 午夜欧美不卡' | 亚洲自拍小视频| 裤袜国产欧美精品一区| 欧美日韩成人精品| yjizz视频网站在线播放| 亚洲第一视频网| 一级片视频播放| 天天综合日日夜夜精品| 九九精品视频免费| 久久综合狠狠综合久久综合88 | 北条麻妃在线视频观看| 91精品亚洲| 亚洲va韩国va欧美va精四季| 激情亚洲另类图片区小说区| 91在线播放国产| 黄色精品视频| 2019中文字幕免费视频| 午夜小视频在线观看| 中文字幕精品在线视频| 午夜视频福利在线观看| 欧美一区二区精品久久911| 在线视频精品免费| 欧美性生交大片免网| 国产精彩视频在线| 亚洲男帅同性gay1069| 最新黄色av网址| 欧美国产欧美综合| 偷拍女澡堂一区二区三区| 成人国产免费视频| 韩国三级在线看| 国产精品一区二区久久不卡| 亚洲精品成人在线播放| 日韩精品免费专区| 日韩精品一区二区三区色欲av| 在线亚洲成人| 黄色一级视频片| 中文精品视频| 欧美精品一区免费| 国产精品美女| 人人妻人人添人人爽欧美一区| 激情av一区| 激情五月婷婷六月| 欧美日韩国产精品一区二区亚洲| 日本黄xxxxxxxxx100| 一本一本久久a久久综合精品| 一区精品在线| 91一区二区三区四区| 中国成人亚色综合网站| 综合久久十次| 国产精品va在线观看无码| 国产一区亚洲| 国产精品12345| 美女诱惑一区| 丰满少妇在线观看| 久久99精品久久只有精品| 日本黄色的视频| 国产一区二区精品在线观看| 三区视频在线观看| 国产精品一级黄| 国产白袜脚足j棉袜在线观看| 成人福利视频在线看| 在线免费播放av| 久久久高清一区二区三区| 日本人亚洲人jjzzjjz| 中文字幕在线免费不卡| 国产尤物在线播放| 亚洲国产日韩在线一区模特| 日韩精品在线观看免费| 91搞黄在线观看| 一级做a爰片久久毛片16| 日韩精品一区二区三区四区| 欧美一区二区三区成人片在线| 亚洲精品国产精品国产自| 美女欧美视频在线观看免费| 色综合亚洲精品激情狠狠| 超碰最新在线| 18性欧美xxxⅹ性满足| 亚洲不卡系列| 亚洲qvod图片区电影| 欧美做受69| 亚洲欧美精品在线观看| 欧美精品九九| 激情婷婷综合网| 国产精品中文字幕欧美| 国产精品无码在线| 国产精品久久久久毛片软件| 久青草免费视频| 在线视频国内自拍亚洲视频| 国产超碰人人模人人爽人人添| 亚洲精品国产品国语在线| 爱爱爱免费视频在线观看| 美女av一区二区| 自拍偷自拍亚洲精品被多人伦好爽 | 欧洲大片精品免费永久看nba| 精品欧美一区二区在线观看视频| 色婷婷热久久| 免费国产a级片| 狠狠色伊人亚洲综合成人| 人妻少妇精品视频一区二区三区| 国产精品美女www爽爽爽| 日韩伦理在线视频| 在线播放一区二区三区| 精品亚洲综合| 欧美极品欧美精品欧美视频| 素人啪啪色综合| 精品国产乱码久久久久久88av| 天天揉久久久久亚洲精品| 日本在线视频www| 成人av在线一区二区| 色婷婷粉嫩av| 色av综合在线| 色婷婷av一区二区三区之红樱桃| 日韩在线观看免费高清| 亚洲一区站长工具| 国产精品一区二区av| 久久久久久久久99精品大| 国产第一页视频| 99精品欧美一区二区三区小说| 欧美 日韩 国产 一区二区三区 | 国产精品伊人久久| 国产一区二区三区视频在线观看| а√在线中文网新版地址在线| 亚洲影院高清在线| 国产精品国产一区| 高清一区二区视频| 久久精品视频一区| 国产精品久久久免费视频| 精品日产卡一卡二卡麻豆| 国产鲁鲁视频在线观看特色| 国产日韩综合一区二区性色av| 国产精品一区二区av日韩在线| 欧美日韩精品在线一区二区| 国产成人8x视频一区二区| 欧美三级免费看| 欧美丰满嫩嫩电影| 天堂а√在线资源在线| 国产精品免费在线免费| 精品久久视频| 欧美婷婷精品激情| 国产精品午夜免费| 中文字幕一区二区三区四区欧美| 日韩精品在线免费播放| 欧美极品videos大乳护士| 好吊色欧美一区二区三区视频| 精品91久久久久| 国产精品无码一区二区三| 亚洲444eee在线观看| 天天干天天做天天操| 欧美亚洲成人xxx| 亚洲宅男一区| 91日韩视频在线观看| 国产精品素人一区二区| 这里只有久久精品视频| 色诱女教师一区二区三区| avtt久久| 欧美国产视频一区| 国产69精品一区二区亚洲孕妇| 欧美黄色免费看| 亚洲韩国日本中文字幕| 中文在线а√在线8| 欧美连裤袜在线视频| 日韩经典中文字幕一区| 综合 欧美 亚洲日本| 欧美日韩精品福利| 色综合999| 欧美精品一区二区三区久久| 男人的天堂久久精品| 欧美日韩午夜视频| 精品国产一区二区三区久久久蜜月 | 国产成人精品日本亚洲| 日本一二区不卡| 国产在线视频三区| 精品国产福利在线| 国产高清视频在线| 91av免费看| 国产精品毛片在线看| 国产三级精品三级观看| 精品少妇一区二区| 久久夜夜操妹子| 国产精品视频一二三四区| 91香蕉视频在线| 在线观看中文字幕码| 欧美极品美女视频网站在线观看免费 | 天堂网av2018| 精品捆绑美女sm三区| 成人福利av| 伊人久久在线观看| 26uuu久久天堂性欧美| ,亚洲人成毛片在线播放| 欧美国产日产韩国视频| 久久最新网址| 色诱av手机版| 在线观看视频91| 川上优av中文字幕一区二区| 中文字幕欧美人与畜| 91蝌蚪porny| 亚洲经典一区二区| 国产免费一区二区三区在线能观看 | 免费观看美女裸体网站| 国产精品成人免费精品自在线观看| 男人天堂av网| 成人在线播放av| 国产一区二区三区的电影|