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

alloc、init你弄懂50%了嗎?

移動開發 iOS
這是一篇我記錄對alloc、init分析思考的筆記。如果讀者想看懂我的第二個思考,可能需要您至少了解內存的分段分頁管理,如果您對其一點都不知道,可以先看這篇軟文簡單了解一下。

前言

這是一篇我記錄對alloc、init分析思考的筆記。如果讀者想看懂我的第二個思考,可能需要您至少了解內存的分段分頁管理,如果您對其一點都不知道,可以先看這篇軟文簡單了解一下。另外很重要的一點是,請先思考。

思考1.對象為什么要alloc,init又是干嘛的?

很多人都知道,初始化一個對象應該這么寫:

  1. MyClass* myObj = [MyClass alloc] init]; 

那么有沒有思考過為什么呢?其實我這么寫也是完全可以的:

  1. MyClass *myObj = [MyClass alloc]; 
  2. myObj = [myObj init];  

我們來看看這干了啥。

  1. alloc allocates a chunk of memory to hold the object, and returns the pointer. 

就是說alloc分配了一坨 內存給對象,讓它不釋放,并且把地址返回給指針。

  1. MyClass *myObj = [MyClass alloc]; 

那么這樣過后myobj為什么不能被使用呢?這是因為這片內存還沒有被正確的初始化。

舉個栗子,萬達要修房子,他們第一步一定是要先向政府搞到一塊地,第二步才能在這塊地上動工修樓。

這里操作系統就是政府,alloc就是去爭地,init就是在地上修房子。沒有調用init,房子都沒有修好,別人怎么買房進去住?所以我們需要用init來初始化這片內存:

  1. -init{ 
  2.  
  3.      self=[super init]; // 1. 
  4.  
  5.      if(self){          // 2. 
  6.  
  7.          .... 
  8.  
  9.      } 
  10.  
  11.      return self;       // 3. 
  12.  
  13.  

第一步需要初始化父類的信息,比如實例變量等等。可以理解成王思聰在修房子前要詢問他老爸的意見,他老爸說想娛樂會所,他沒有意見的話就會修成娛樂會所,他如果有意見,就可以悄悄的在第二步里面改為修成LOL俱樂部。第三步就不說了。

最后提醒一下,不要這樣寫:

  1. MyClass* myObj = [MyClass alloc]; 
  2. myObj=[myObj init];  

因為你可能會忘記在第二行加init,并且代碼也會增長。

思考2.關于alloc的思考

在思考1中我們說了:alloc分配了一坨 內存給對象,讓它不釋放,并且把地址返回給指針。這里主要有兩個問題:

  • 調用alloc后內存是直接映射到堆還是只分配給了虛擬內存?
  • 這一坨內存到底是多大?

我們依次來展開。

可能有些讀者不明白第一個問題是什么意思,這里需要額外講一些關于內存的東西,其實這是iOS開發很重要的東西,不管是面試還是學習都可能會用到。

額外的東西

iOS里的內存是有分類的,它分成Clean Memory和Dirty Memory。顧名思義,Clean Memory是可以被操作系統回收的,Dirty Memory是不可被操作系統回收的。

  • Clean Memory:在閃存中有備份,能再次讀取重建。如:

Code(代碼段),framework,memory-mapped files

  • Dirty Memory:所有非Clean Memory,如:

被分配了的堆空間,image cache

舉個栗子,在這樣的代碼中:

  1. - (void)dirtyOrCleanMemory 
  2.  
  3.  
  4.     NSString *str1 = [NSString stringWithString:@"Welcome!"];   // 1. 
  5.  
  6.     NSString *str2 = @"Welcome"; // 2. 
  7.  
  8.      
  9.  
  10.     char *buf = malloc(100 * 1024 * 1024); // 3.分配100M內存給buf 
  11.  
  12.      
  13.  
  14.     for (int i = 0; i < 3 * 1024 * 1024; ++i) { 
  15.  
  16.         buf[i] = rand(); 
  17.  
  18.     } // 4.buf的前3M內存被賦值 
  19.  
  20.  

對每行分析:

1.Dirty Memory。

因為stringWithString:是在堆上分配內存的,如果我們不回收它的話,系統會一直占用這塊內存。

2.Clean Memory。

因為用這樣的方法創建的是一個常量字符串,常量字符串是放在只讀數據段的,如果這塊內存被釋放了,而我們又訪問它的時候,操作系統可以在只讀數據段中把值再讀取出來重建這塊內存。(ps:所以用這種方法創建的string是沒有引用計數的。)

接下來的知識就是引出思考問題1、2比較重要的點了:

3.Clean Memory。

這個時候buf指向的100M內存區域是Clean Memory的,因為操作系統是很懶的,只有當我們要用到這塊區域的時候才會映射到物理內存,沒有使用的時候只會分配一塊虛擬內存給buf。讀起來很繞口,上張圖:  

 

 

可以看到虛擬內存和物理內存沒有映射關系,所以是Clean Memory的。

4.Dirty & Clean Memory混合。

前3M是Dirty Memory,后97M是Clean Memory。這句for語句執行完成后,buf的前3M內存被賦值,也就是buf的前3M被使用了,所以這個時候的映射關系是這樣的: 

 

額外的東西Done.

回到主線

調用alloc后內存是直接映射到堆(物理內存)還是只分配給了虛擬內存?

一坨內存的一坨是多大?

這個時候我們的第一個問題讀者應該能明白了。那么我們怎么驗證alloc是直接映射到堆上還是只分配給虛擬內存呢?這個問題讓我想了好些天,最后xo哥想到了一劑良藥來驗證,那就是用instrument來推反。

使用instrument來證反

我們假設的論點是:對象收到alloc消息后只在虛擬內存分配空間。

這里需要一丁點代碼。

1.我們隨便新建個工程。

2.然后做個model類:

  1. #import <Foundation/Foundation.h> 
  2.  
  3.   
  4.  
  5. @interface XOModel : NSObject 
  6.  
  7.  
  8.     int a1; 
  9.  
  10.     NSString *a2; 
  11.  
  12.  
  13.   
  14.  
  15. @end  

3.在controller里給view加一個點擊事件:

  1. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
  2.  
  3.     for (int i = 0; i < 100000; ++i) { 
  4.  
  5.         XOModel *model = [XOModel alloc]; // 注意這句只有alloc 
  6.  
  7.         [self.array addObject:model]; 
  8.  
  9.     } 
  10.  
  11.  

4.打開instrument的alloction,運行觸發一下點擊事件,查看如下:   

 

(圖解:Persistent bytes表示所有的這類東西在堆里的大小,Persistent表示所有的這類東西的個數.)

我們發現發現在Persistent bytes(堆)里實實在在地分配給了XOModel 3.05MB的空間。

我們再觸發一下點擊事件:   

 

發現堆分配給了XOModel的大小空間變成了原來的兩倍6.10MB。

結論過渡:如果對象收到alloc消息只在虛擬內存分配空間,那么persistent bytes(堆)里是不會分配給XOModel大小的,也就是說這里的persistent bytes大小應該是0。所以問題1的結論如下:

結論:alloc不只分配在虛擬內存,同時會在物理內存建立映射。

對象的內存分配

最后剩下我們的最后一個問題:類對象收到alloc消息后,操作系統會分配出來的一坨內存是多大?

3.05M的大小是100000個XOModel對象的總和,那么一個XOModel的實例對象,操作系統會給他分配多大的空間呢?很簡單嘛,3.05M/100000就得到了,等等,難道你真準備這樣去算?好吧,其實一開始我真這樣想過,但是這肯定是算不出準確答案的,關鍵是你要去思考。

這里有兩種辦法,我采用的第二種辦法。

第一種驗證方法還是instrument

我們可以修改一下觸發的代碼,然后重新刷新instrument查看XOModel大小,具體操作同上,不重復了:

  1. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
  2.  
  3.     for (int i = 0; i < 1; ++i) { // 修改處 
  4.  
  5.         XOModel *model = [XOModel alloc]; // 注意這句只有alloc 
  6.  
  7.         [self.array addObject:model]; 
  8.  
  9.     } 
  10.  
  11.  

第二種驗證辦法借用runtime

我們可以借助runtime來查看一個類對象所需要的內存大小。值得一提的是我最開始用的方法是class_getInstanceSize,原型如下:

  1. /** 
  2.  
  3. Returns the size of instances of a class. 
  4.  
  5.  
  6. * @param cls A class object. 
  7.  
  8.  
  9. * @return The size in bytes of instances of the class \e cls, or \c 0 if \e cls is \c Nil. 
  10.  
  11. */ 
  12.  
  13. OBJC_EXPORT size_t class_getInstanceSize(Class cls) 
  14.  
  15.      __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);  

貌似是我們需要的函數,但是我發現這個方法有bug,返回的size和instruments的值不同,后來又發現有人遇到同樣的問題,所以摘抄了另一種方法,代碼如下: 

  1. #import <objc/runtime.h> 
  2.  
  3. #import <malloc/malloc.h> 
  4.  
  5. ... 
  6.  
  7. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
  8.  
  9.     XOModel *model = [XOModel alloc]; 
  10.  
  11.     [self.array addObject:model]; 
  12.  
  13.      
  14.  
  15.     NSLog(@"Size of %<a href="http://www.jobbole.com/members/q697158886">@:</a> %zd", NSStringFromClass([XOModel class]), malloc_size((__bridge const void *) model)); 
  16.  
  17.  

再貼下XOModel代碼:

  1. #import <Foundation/Foundation.h> 
  2.  
  3.   
  4.  
  5. @interface XOModel : NSObject 
  6.  
  7.  
  8.     int a1; 
  9.  
  10.     NSString *a2; 
  11.  
  12.  
  13.   
  14.  
  15. @end  

在iPhone 6(或其他64位)的機子上運行,輸出如下:

  1. AllocTest[38470:2551068] Size of XOModel: 32 

“啊咧,我一個int,一個指針你分給我32個字節,操作系統你是腦子進屎了嗎?”

我們再修改一下XOModel代碼,不要實例變量:

  1. #import <Foundation/Foundation.h> 
  2.  
  3.   
  4.  
  5. @interface XOModel : NSObject 
  6.  
  7.  
  8.  
  9.   
  10.  
  11. @end  

輸出如下:

  1. AllocTest[38630:2562602] Size of XOModel: 16 

“我靠,我什么東西都沒有,操作系統你還要分給我16個字節,是不是傻?”

智慧的操作系統這樣做當然是有它自己的原因滴,這里我們需要知道三個東西:

  1. 任何類對象都有一個isa指針,需要分配內存。
  2. 32位機子上指針大小為4字節,64位機子為8字節。
  3. 字節對齊。

第一點就不說了,不知道的話您多半也沒耐心看到現在了。

第二點貼個文檔圖,iOS7過后部分蘋果機就開始從32位操作系統轉到64位了,所以部分數據類型的大小也有變化,這里我們主要關注例子中的指針:   

 

現在,基于這兩點對樣例分析。

  • 第一個樣例(類對象中一個int,一個NSString指針,一個isa指針),64位操作系統上應該是4+8+8=20,然而輸出是32,不對。
  • 第二個樣例(類對象中只有一個isa指針),64位操作系統上應該是8,然而輸出是16,還是不對。why?

字節對齊

字節對齊我了解得也不是太多,簡單點講目的就是為了提高存取效率,概念就不展開了,可以看這個,我這里就直接講原理了。先貼一份蘋果的文檔:

When allocating any small blocks of memory, remember that the granularity for blocks allocated by the malloc library is 16 bytes. Thus, the smallest block of memory you can allocate is 16 bytes and any blocks larger than that are a multiple of 16. For example, if you call malloc and ask for 4 bytes, it returns a block whose size is 16 bytes; if you request 24 bytes, it returns a block whose size is 32 bytes. Because of this granularity, you should design your data structures carefully and try to make them multiples of 16 bytes whenever possible.

有點長,簡單的意思就是:

當我們分配一塊內存的時候,假設需要的內存小于16個字節,操作系統會直接分配16個字節;加入需要的內存大于16個字節,操作系統會分配a*16個字節。舉個栗子,如果你調用malloc并且需要4個字節,系統會給你一塊16個字節的內存塊;如果你調用malloc并且需要24個字節,系統會給你一塊32個字節的內存塊。

現在再看我們的栗子,就可以直接上圖了:

第一個例子不對齊應該是20字節,對齊就是32字節。   

 

第二個例子不對其應該是8字節,對齊就是16字節:  

 

 

ps:在32位機器上可能會有不一樣的結果,因為指針大小不同,但是32位的蘋果機也是16字節對齊的。

至此我們對alloc的探究就結束了。

結語

這次的探究算是比較徹底了,過程當中也學到了很多東西,在這個浮躁的社會,學貴在道,術次之,打好基礎、保持思考才不會磨滅掉你對它最初的興趣。

參考鏈接:(由于微信不允許發鏈接,可點擊原文進行查看)

  • iOS內存管理及優化-騰訊莊延軍
  • Checking the size of an object in Objective-C – Stack Overflow
  • Does class_getInstanceSize have a known bug about returning incorrect sizes? – Stack Overflow
  • Memory Usage Performance Guidelines – 蘋果文檔
  • 字節對齊-百度百科

Done

 

責任編輯:龐桂玉 來源: iOS大全
相關推薦

2013-07-25 13:15:55

iOS開發學習new與allocinit區別

2021-10-12 10:50:31

鴻蒙HarmonyOS應用

2021-09-15 11:41:53

Linux cdevLinux 系統

2012-01-13 13:05:41

Scale Out網絡

2009-06-22 14:36:09

ITIL運維管理摩卡軟件

2012-08-29 09:44:20

免費增值

2010-08-04 15:01:00

2012-03-12 13:47:05

移動廣告

2013-07-15 16:55:45

2024-01-19 08:25:38

死鎖Java通信

2021-11-23 20:22:54

貪心數量策略

2009-09-15 13:33:38

SOA架構

2021-09-09 06:55:44

Docker權限cgroup

2019-11-20 10:50:36

轉網運營商流量

2022-12-30 08:35:00

2024-08-13 08:30:13

2023-01-10 08:43:15

定義DDD架構

2012-02-27 10:02:06

云計算

2012-01-16 10:41:25

安全互聯網IT部門

2022-04-01 08:23:17

InputstreString字符串
點贊
收藏

51CTO技術棧公眾號

成人免费在线| 在线观看日韩中文字幕| 国产在线一区不卡| 国产精品成人午夜| 51国偷自产一区二区三区的来源| 日韩高清dvd碟片| 国产精品视频一区视频二区| 亚洲免费av高清| 国产精品丝袜高跟| 一区二区国产精品精华液| 国产免费av国片精品草莓男男| 国产欧美精品一区二区色综合| 国产日韩欧美在线看| 黑人巨大精品一区二区在线| 国产精品久久久久久久久久白浆 | 无码国产69精品久久久久网站| av资源在线| 国产亚洲综合色| 91香蕉嫩草影院入口| 18精品爽视频在线观看| 欧美一区二区三区久久| 欧美私人免费视频| 国产片侵犯亲女视频播放| 午夜视频免费看| 免费黄网站欧美| 久久99精品视频一区97| 法国伦理少妇愉情| 国产精品一级在线观看| 色综合久久综合| 99精品视频网站| 婷婷国产在线| 国产一区二区三区免费| 日韩av色在线| 欧洲猛交xxxx乱大交3| 国产精品chinese在线观看| 在线观看免费一区| 国产九色porny| 日本精品一区二区三区在线播放| 成人精品高清在线| 成人在线国产精品| 国内自拍视频在线播放| 亚洲欧美综合| 国产亚洲日本欧美韩国| 人妻互换一二三区激情视频| 日韩经典一区| 欧美视频在线观看免费网址| 麻豆视频传媒入口| 国产一区二区影视| 91在线观看免费视频| 91美女福利视频高清| 天天爽夜夜爽人人爽| 欧美天堂亚洲电影院在线观看| 中文字幕亚洲情99在线| 欧美性xxxx图片| 99视频这里有精品| 在线视频国内一区二区| 成人一级生活片| av在线播放国产| 国产精品三级av| 欧美三级华人主播| 手机亚洲第一页| 成人va在线观看| 亚洲中国色老太| 亚洲天堂2021av| 久久国产日韩| 日本久久精品视频| 伊人手机在线视频| 亚洲黄色影片| 欧美劲爆第一页| 激情小说中文字幕| 欧美激情日韩| 美日韩丰满少妇在线观看| 国精产品久拍自产在线网站| 成人久久综合| 中文字幕日韩高清| 国产传媒在线看| 欧美久久综合网| 亚洲精品乱码久久久久久金桔影视| 中文字幕资源在线观看| 欧美国产日韩电影| 欧美日韩中文字幕一区二区| 精品久久久久久久无码 | 国产 日韩 欧美 精品| 成人午夜av电影| 国产精品xxx在线观看www| www.久久成人| 丁香桃色午夜亚洲一区二区三区| 99电影在线观看| 亚洲AV无码乱码国产精品牛牛 | 五月天国产视频| 欧美久久久网站| 69久久99精品久久久久婷婷 | 粉嫩嫩av羞羞动漫久久久| 豆国产97在线| 亚洲色欧美另类| 国产亚洲精品久| 亚洲欧洲三级| 国产cdts系列另类在线观看| 日韩理论片一区二区| 日本xxxxx18| 超碰在线最新网址| 日韩欧美主播在线| 亚洲免费在线播放视频| 国内精品偷拍| 亚洲日韩中文字幕在线播放| 国产亚洲精品精品精品| 午夜天堂精品久久久久| 欧美在线免费观看| 91在线观看喷潮| 不卡一区在线观看| 日本中文不卡| 人人超在线公开视频| 色综合天天综合网国产成人综合天 | 色88久久久久高潮综合影院| 欧美成人国产va精品日本一级| 精品无码人妻一区二区三| 毛片一区二区| 成人做爽爽免费视频| 丰满熟妇乱又伦| 国产午夜精品一区二区三区四区| 中文字幕一区二区三区有限公司| 麻豆福利在线观看| 欧美视频你懂的| 99精品视频免费版的特色功能| 成人h动漫免费观看网站| 亚洲人午夜精品免费| 久草免费新视频| 奇米影视一区二区三区小说| 国产精品一区二区三区精品| 日本在线观看www| 午夜影视日本亚洲欧洲精品| 国产精品嫩草影院8vv8 | 欧美激情一区二区三区在线视频| 国产婷婷视频在线| 色综合久久久久| 欧美国产在线一区| 成人久久电影| 欧美在线xxx| 亚洲精品一区二区三区四区| 国产精品久久久久久久久图文区 | 超碰在线97免费| 欧美电影院免费观看| 在线观看欧美视频| 欧美激情黑白配| 国产成人99久久亚洲综合精品| 亚洲欧美日韩另类精品一区二区三区 | 亚洲毛片aa| 综合毛片免费视频| 亚洲电影免费观看高清完整版在线| 成人欧美一区二区三区黑人一 | 亚洲精品免费在线看| 日韩激情电影免费看| 日韩精品一区在线| 天天综合天天做| 日韩电影在线观看电影| 精品欧美一区二区精品久久| 欧美高清另类hdvideosexjaⅴ| 欧美日本视频在线| 亚洲人成人无码网www国产 | 18禁男女爽爽爽午夜网站免费| 亚洲国产中文在线二区三区免| 日韩亚洲第一页| 在线观看毛片视频| 国产精品欧美一级免费| 激情五月开心婷婷| 免费不卡中文字幕在线| 2019中文字幕在线观看| 少妇喷水在线观看| 午夜伦欧美伦电影理论片| 成人做爰69片免费| 韩日在线一区| 国产精品日韩高清| 黄网av在线| 亚洲成人av片在线观看| 国产精品a成v人在线播放| 成人精品高清在线| 日韩免费一级视频| 日韩一级电影| 日韩美女在线看| 成人在线观看免费| 欧美日韩在线三级| 欧美激情精品久久久久久免费 | 91chinesevideo永久地址| 五月天激情婷婷| 欧美视频裸体精品| www亚洲色图| 老司机午夜精品| 日韩中文在线字幕| www.久久东京| 奇米4444一区二区三区| 国产毛片在线看| 色综合久久66| ass极品国模人体欣赏| 美女www一区二区| 日本一级淫片演员| 97人人澡人人爽91综合色| 97在线观看免费| 黄视频在线观看免费| 欧美日韩另类一区| 九九九免费视频| 成人午夜在线视频| 国产素人在线观看| 国产精品一区高清| 91福利入口| 最新欧美色图| 日韩亚洲欧美中文高清在线| 成人av手机在线| 欧美性69xxxx肥| 91麻豆免费视频网站| 99久久精品国产导航| 国产又大又黄又猛| 禁久久精品乱码| 日本精品一区二区三区视频| 中文字幕综合| 91sao在线观看国产| 国产在线一在线二| 制服丝袜亚洲精品中文字幕| 奇米影视第四色777| 国产精品久久久一本精品| 国产精久久久久| 美女免费视频一区| 国产一级爱c视频| 色综合色综合| 麻豆av一区| 亚洲精品v亚洲精品v日韩精品| 7m精品福利视频导航| 久久这里精品| 精品国产一区二区三区久久影院| 少妇无套内谢久久久久| 亚洲一区二区欧美日韩| 国产真人真事毛片视频| 99国产精品久| 免费av不卡在线| 日本午夜精品视频在线观看| 亚洲精品无码国产| 无需播放器亚洲| 日韩av电影在线观看| 99精品国产一区二区三区2021| 国产啪精品视频网站| 日韩激情电影| 97国产suv精品一区二区62| 久久77777| 国产亚洲精品久久久久久牛牛| 99精品免费观看| 欧美日韩久久不卡| 欧美黄色一级大片| 欧美日韩国产麻豆| 国产一级片免费| 综合久久综合久久| 精品在线观看一区| ww亚洲ww在线观看国产| 中文在线一区二区三区| 国产不卡一区视频| 一级片黄色免费| 久久99精品久久久久久动态图 | 国产网站在线免费观看| 中文综合在线观看| 国产尤物视频在线| 亚洲人午夜精品| 日本成人一区| 日韩精品在线视频观看| 天堂av中文字幕| 精品国产凹凸成av人导航| av观看在线免费| 欧美精品乱码久久久久久| 制服丝袜在线一区| 欧美羞羞免费网站| 中文字幕丰满人伦在线| 欧美午夜精品电影| 波多野结衣mp4| 欧美亚洲国产一区在线观看网站| 无码人妻精品一区二| 色素色在线综合| 姑娘第5集在线观看免费好剧| 欧美性猛交xxxxxx富婆| 中文字幕一二区| 在线91免费看| 成人高潮片免费视频| 精品999在线播放| 天堂a√中文在线| 亚洲天堂男人天堂女人天堂| 色开心亚洲综合| 中文精品99久久国产香蕉| 免费国产在线视频| 国产一区二区精品丝袜| 婷婷在线视频| 欧美另类精品xxxx孕妇| 国产免费拔擦拔擦8x在线播放| 日本欧美国产在线| 91大神在线观看线路一区| 国产主播在线一区| 日韩成人在线一区| 国产欧美精品久久久| 国产色99精品9i| 国产三区精品| 欧美亚洲在线日韩| 无码毛片aaa在线| 亚洲黑丝一区二区| 日本中文字幕高清| 国产精品一区在线| 亚洲天堂av一区二区三区| 久久成人18免费观看| 性生活一级大片| 91麻豆蜜桃一区二区三区| 人人爽人人爽人人片| 亚洲欧美国产77777| 99视频在线看| 666欧美在线视频| 天堂在线免费av| 色婷婷综合久久久久中文字幕1| 中文在线手机av| 久久久亚洲精品视频| 欧美一级大黄| 7777精品伊久久久大香线蕉语言 | 91美女视频在线| 欧美成人中文字幕在线| 高h视频在线播放| 国产精品1区2区在线观看| 91精品国产自产在线丝袜啪| 日本成人三级电影网站| 欧美天天视频| 中文字幕亚洲乱码| 99久久综合国产精品| 国产精品免费人成网站酒店| 色综合久久久久综合体桃花网| 国产精品久久无码一三区| 亚洲精品电影在线| 在线免费观看黄| 91精品国产高清久久久久久91 | 欧美大黑bbbbbbbbb在线| www.亚洲视频.com| 久久国产视频网| 中国极品少妇videossexhd | 蜜桃精品久久久久久久免费影院| sdde在线播放一区二区| 少妇一晚三次一区二区三区| 免费在线观看日韩欧美| 西西大胆午夜视频| 一区二区三区色| 国产又粗又猛又爽又黄的视频一| 亚洲色图激情小说| 美女露胸视频在线观看| 91精品视频大全| 欧美一区电影| 国产精品涩涩涩视频网站| 国产成人免费视频精品含羞草妖精| 国产精品无码永久免费不卡| 一区二区三区四区不卡在线| 国产伦精品一区二区三区视频痴汉| 亚洲性av在线| 无人区在线高清完整免费版 一区二| 国产精品一区二区三区免费观看| 热久久天天拍国产| 国产精品人人妻人人爽人人牛| 国产日产精品一区| 亚洲一区二区人妻| 俺去亚洲欧洲欧美日韩| 欧美经典一区| 成人午夜视频在线观看免费| 波波电影院一区二区三区| wwwxxx亚洲| 精品视频偷偷看在线观看| 欧美xnxx| 亚洲黄色网址在线观看| 成人综合在线观看| 久草手机在线观看| 一区二区三区视频在线| 2019中文亚洲字幕| 欧美这里只有精品| 久久久亚洲国产美女国产盗摄| 中文字幕人妻丝袜乱一区三区| 丝袜亚洲欧美日韩综合| 欧美日本三级| 国产欧美日韩网站| 久久精品人人爽人人爽| 国产又粗又猛又黄| 欧美激情精品久久久久久久变态| 秋霞影视一区二区三区| 99视频在线视频| 亚洲激情综合网| 婷婷av一区二区三区| 国产精品1区2区在线观看| 影音先锋日韩在线| 国产 xxxx| 欧美三级韩国三级日本三斤| 日本三级在线观看网站| 蜜桃传媒视频麻豆第一区免费观看| 日韩**一区毛片| 久久久美女视频| 中文字幕欧美国内| 国产毛片久久久| 91欧美视频在线| 欧美日韩激情网| www.在线视频| 日韩欧美视频第二区| 国产精品一卡二卡在线观看| 成年人晚上看的视频| 色综合天天狠天天透天天伊人| 狠狠色丁香婷婷综合影院| 不许穿内裤随时挨c调教h苏绵 |