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

讓我們一起揭秘代碼效率真相

開發 前端
本篇文章我們將繼續分析C++各種操作的效率,包括不同類型變量的存儲效率,使用智能指針、循環、函數參數、虛函數、數組等的效率,以及如何做針對性優化,或選擇更有效的替代方案。

 [[383104]]

本文轉載自微信公眾號「程序喵大人」,作者程序喵大人 。轉載本文請聯系程序喵大人公眾號。

大家好,我是逐漸過氣的程序喵。

本篇文章我們將繼續分析C++各種操作的效率,包括不同類型變量的存儲效率,使用智能指針、循環、函數參數、虛函數、數組等的效率,以及如何做針對性優化,或選擇更有效的替代方案。

詳細目錄看下圖:

類和結構體

現今流行面向對象編程,個人也認為這是一種使代碼更加清晰和模塊化的方法。面向對象編程風格優缺點明顯,優點是:

  1. 如果變量是同一結構體或類的成員,則一起使用的變量也存儲在一塊,這樣數據緩存更有效。
  2. 類成員變量不需要作為參數傳遞給類成員函數,省去了參數傳遞的開銷。

缺點是:

  1. 一些程序員把代碼分成太多的小類,沒太大必要且效率低。
  2. 非靜態成員函數有一個this指針,它會作為隱式參數傳遞給函數,這會產生一部分開銷,特別是在32位系統中,寄存器是稀缺資源,this指針會占用一個寄存器。
  3. 虛函數效率較低

類和成員函數的開銷其實并沒有特別大,如果面向對象風格可以使程序結構更加清晰,我們只要避免在程序最關鍵的部分使用太多的函數調用,就不要擔心它的開銷。

類的數據成員

當創建類或結構體的實例時,其數據成員按其聲明的順序連續存儲。大多數編譯器都會對結構體進行內存對齊,這種對齊可能會在成員大小混合的結構體或類中,造成未使用字節的空洞。

  1. struct S1 { 
  2.     short int a; // 2字節 
  3.     // 6個空洞 
  4.     double b; // 8 
  5.     int d; // 4 
  6.     // 4個空洞 
  7. }; 
  8. S1 ArrayOfStructures[100]; 

這里,在a和b之間有6個未使用的字節,因為b必須從一個能被8整除的地址開始。最后還有4個未使用的字節。這樣做的原因是,數組中S1的下一個實例必須從一個能被8整除的地址開始,以便將其b成員以8對齊。通過將最小的成員放在最后,未使用的字節數可以減少到2:

  1. struct S1 { 
  2.     double b; // 8 
  3.     int d; // 4 
  4.     short int a; // 2 
  5.     // 2個空洞 
  6. }; 
  7. S1 ArrayOfStructures[100]; 

這種重新排序使結構變小了8個字節,整個數組變小了800個字節。

通過重新排序數據成員,結構對象和類對象通常可以變小。如果不確定一個結構或它的每個成員有多大,可以使用sizeof,它的返回值包括對象末尾的任何未使用的字節。

如果成員相對于結構體或類開頭的偏移量小于128,則訪問數據成員的代碼會更緊湊,因為該偏移量可以表示為8位有符號的數字。如果相對于結構體或類的開頭的偏移量是128字節或更大,那么偏移量必須表示為一個32位數字(指令集在8位到32位之間沒有偏移量)。例如:

  1. struct S2 { 
  2.     int a[100]; // 400 
  3.     int b; // 4 
  4.     int ReadB() {return b;} 
  5. }; 

b的偏移量是400。任何通過指針或成員函數(如ReadB)訪問b的代碼,都需要將偏移量編碼為32位數字。如果交換了a和b,則兩者都可以通過編碼為8位有符號數字的偏移量來訪問,或者根本沒有偏移量。這使代碼更緊湊,以便更有效地使用Cache。因此,建議在結構或類聲明中,大數組和其他大對象排在最后,最常用的數據成員排在前面。如果不能在前128個字節內包含所有數據成員,則將最常用的成員放在前128個字節中。

類的成員函數

每次聲明或創建類的新對象時,都會生成數據成員的新實例。但無論多少類的實例,成員函數只有一份。調用成員函數和使用結構指針或引用來調用簡單函數一樣快。

  1. struct S3 { 
  2.     int a; 
  3.     int b; 
  4.     int Sum1() {return a + b;} 
  5. }; 
  6. int Sum2(S3* p) {return p->a + p->b;} 
  7. int Sum3(S3& r) {return r.a + r.b;} 

這三個函數Sum1, Sum2和Sum3,做的是完全相同的事情,而且它們的效率是一樣的。有些編譯器會為這三個函數生成完全相同的代碼。Sum1有一個隱式的this指針,它和Sum2和Sum3中的p和r做同樣的事情。讓函數成為類的成員,還是給它一個指向類或結構的指針或引用,這只是編程風格的問題。一些編譯器通過在寄存器中傳輸this指針,使Sum1在32位Windows中比Sum2和Sum3更有效率。

靜態成員函數不能訪問任何非靜態數據成員或非靜態成員函數。靜態成員函數比非靜態成員函數更快,因為它不需要this指針。如果成員函數,它不需要任何非靜態成員訪問,可以通過將它們設為靜態函數來加快速度。

虛函數

虛函數用于實現運行時多態,多態是面向對象編程相對于非面向對象編程效率低的主要原因之一。如果可以避免虛函數的使用,那可以提高程序的運行效率,一般情況下,可以考慮使用編譯時多態替代運行時多態。關于虛函數為什么導致程序效率低,可以看我之前的文章:《》

RTTI

RTTI,運行時類型識別,會向所有類對象添加額外的信息,所以效率不高,可以考慮關閉RTTI選項來提高程序效率。

繼承

派生類對象的實現方式,與包含父類和子類成員的簡單類對象相同。父類和子類的成員訪問速度相同。通常,我們可以認為使用繼承幾乎不會對性能造成任何損失。

然而這些情況下,效率稍微會有所下降:

  • 子類包括父類的所有數據成員,即便子類不需要父類的數據成員。
  • 父類數據成員的大小添加到子類成員的偏移量中。訪問總偏移量大于127字節的數據成員的代碼稍微不那么緊湊。

繼承多個父類,可能會導致指向基類指針訪問派生類的對象時更復雜。我們可以通過在派生類中創建對象來避免多重繼承,即組合替代繼承:

  1. class B1; 
  2. class B2; 
  3. class D : public B1, public B2 { 
  4. public
  5.     int c; 
  6. }; 

換成這樣:

  1. class B1; 
  2. class B2; 
  3. class D : public B1 { 
  4. public
  5.     B2 b2; 
  6.     int c; 
  7. }; 

一般來說,只有當繼承對程序的邏輯結構有利時,才應該使用繼承。

位域

位可以使數據更加緊湊。訪問位成員比訪問結構體的普通成員效率低。如果大的數組可以以此來節省代碼空間,那么稍微犧牲點效率也未嘗不可。

使用<<和|操作組合位字段比單獨編寫成員更快。例如:

  1. struct Bitfield { 
  2.     int a:4; 
  3.     int b:2; 
  4.     int c:2; 
  5. }; 
  6. Bitfield x; 
  7. int A, B, C; 
  8. x.a = A; 
  9. x.b = B; 
  10. x.c = C; 

假設A、B和C的值太小,不會導致溢出,可以通過以下方式改進這段代碼:

  1. union Bitfield { 
  2.     struct { 
  3.         int a:4; 
  4.         int b:2; 
  5.         int c:2; 
  6.     }; 
  7.     char abc; 
  8. }; 
  9. Bitfield x; 
  10. int A, B, C; 
  11. x.abc = A | (B<<4) | (C<<6); 

如果需要防止溢出可以這樣:

  1. x.abc = (A & 0x0F) | ((B & 3) << 4) | ((C & 3) <<6 ); 

函數重載

重載的函數,只是作為不同的函數來處理,和普通函數相同,沒有任何性能代價,可放心使用。

運算符重載

重載運算符等同于函數。使用重載運算符與使用普通函數的效率完全相同。帶有多個重載運算符的表達式,會導致為中間結果創建臨時對象,這樣效率較低。例如:

  1. class vector { 
  2. public
  3.     float x, y; 
  4.     vector() {} 
  5.     vector(float a, float b) {x = a; y = b;} 
  6.     vector operator + (vector const &a) { 
  7.         return vector(x+a.x, y+a.y); 
  8.     }     
  9. }; 
  10. vector a, b, c, d; 
  11. a = b + c + d; // 產生了中間對象(b+c) 

可以通過加入以下操作來避免為中間結果(b+c)創建臨時對象:

  1. a.x = b.x + c.x + d.x; 
  2. a.y = b.y + c.y + d.y; 

在簡單情況下,大多數編譯器可能會自動進行這種優化。

模板

在編譯之前,模板的參數被它們的值所替換,這一點上,模板與宏相似。下面的例子說明了函數參數和模板參數的區別:

  1. // Example 7.46 
  2. int Multiply (int x, int m) { 
  3.     return x * m; 
  4. template <int m> 
  5. int MultiplyBy (int x) { 
  6.     return x * m; 
  7. int a, b; 
  8. a = Multiply(10,8); 
  9. b = MultiplyBy<8>(10); 

a和b都會得到值10 * 8 = 80。區別在于m傳遞到函數的方式。在這個簡單函數中,m在運行時從調用方轉移到被調用方。但是在模板函數中,m的值在編譯時就被替換,這樣編譯器看到的是常量8而不是變量m。

模板參數相對于使用函數參數的優點是避免了參數傳遞的開銷,缺點是編譯器需要為模板參數的每個不同值創建一個模板函數的新實例。如果在這個例子中,用許多不同的因子作為模板參數調用MultiplyBy,那么生成的代碼可能會變得非常大。

在上例中,模板函數比簡單函數快,因為編譯器知道它可以通過使用移位操作乘以2的冪。x*8被替換為x<<3,這樣更快。在簡單函數的情況下,編譯器不知道m的值,因此不能進行優化,除非函數可以內聯。(在上面的例子中,編譯器能夠內聯和優化這兩個簡單的函數函數,將80存于a和b中。但在更復雜的情況下,它可能做不了這種優化)。

模板參數也可以是類型,想必大家也經常使用這種類型不同的模板吧。模板之所以高效,是因為模板參數總是在編譯時解析。模板使源代碼更復雜,但不會使編譯后的代碼更復雜。一般來說,使用模板在運行速度方面沒有開銷。

如果模板參數完全相同,兩個或多個模板實例將被連接到一個模板實例中。如果模板參數不同,那么編譯器會為每組模板參數生成一個實例。帶有許多實例的模板會使編譯后的代碼變大。模板的過度使用,會使代碼難于閱讀。如果模板只有一個實例,我們可以使用#define、const或typedef來代替模板形參。

模板可實現編譯時多態,在某些情況下,我們可以使用編譯時多態替代運行時多態。

線程

線程想必大家都知道,充分利用多核系統的最佳方法,是將任務劃分為多個線程。然后,每個線程都可以在自己的CPU內核上運行。

在優化多線程程序時,需要考慮幾種開銷:

  1. 啟動和停止線程的成本:如果一個任務的執行時間,比它啟動和停止線程的時間還要短,那就不要把它放到單獨的線程中。
  2. 上下文切換的成本:如果線程數量不超過CPU的數量,開銷最小。
  3. 線程間同步和通信的成本。信號量、互斥鎖等的開銷相當大,如果兩個線程為了訪問同一資源而經常相互等待,那么最好將它們放到一個線程中。在多個線程之間共享的變量須聲明為volatile,這可以防止編譯器將該變量存儲在寄存器中,而該寄存器在線程之間不共享。

異常和錯誤處理

關于異常和錯誤處理我之前寫過一篇文章你的c++團隊還在禁用異常處理嗎?,大家可以看看,使用異常來處理錯誤是個很有效的方法,異常處理目的是以一種優雅的方式檢測很少發生的錯誤,并從錯誤情況中恢復。使用異常處理有些缺點我們需要知道:

  • 打開exception選項會導致程序空間增大10%左右
  • 帶有try-catch的代碼運行效率和普通代碼類似,但也肯定沒有普通代碼效率高(看編譯器優化的程度)
  • 一旦發生異常,程序運行速度明顯下降

某些明確不會產生異常的函數可以考慮加noexcept修飾,讓編譯器進行最大程度的優化。

如果不需要從錯誤中恢復,則不需要進行異常處理,建議使用系統的、經過深思熟慮的方法來處理錯誤。

預處理指令

預處理指令,所有以#開頭的指令,在程序性能方面沒有任何開銷,因為它們是在程序編譯之前解析的。

#if指令對于支持使用同一源代碼的多個平臺或多個配置很有用。#if比if更高效,因為#if在編譯時解析,而if在運行時解析。

定義常量時,#define指令等價于const定義。例如,#define ABC 123和const int ABC = 123; 同樣有效,因為在大多數情況下,優化編譯器可以用整數常量的值替換整數常量。然而,在某些情況下,const int聲明可能占用內存空間,而#define指令則不會占用內存空間。使用宏有些時候比普通函數更有效。

命名空間

盡管使用命名空間吧,不用擔心,在速度方面沒有任何開銷。

上面分析了不同操作的效率以及如何針對性做一些優化,在網上我也找到了一個圖,圖里列出了不同的操作占用的CPU時鐘周期:

我們可以仔細看看上圖,在編碼時選擇效率更高的操作。

參考資料

https://www.agner.org/optimize/

 

責任編輯:武曉燕 來源: 程序喵大人
相關推薦

2022-03-31 18:59:43

數據庫InnoDBMySQL

2022-03-08 17:52:58

TCP格式IP

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2021-08-27 07:06:10

IOJava抽象

2021-11-26 07:00:05

反轉整數數字

2021-07-15 07:23:28

Singlefligh設計

2022-02-14 10:16:22

Axios接口HTTP

2022-06-26 09:40:55

Django框架服務

2022-02-14 07:03:31

網站安全MFA

2016-09-06 10:39:30

Dell Techno

2023-08-14 08:38:26

反射reflect結構體

2023-08-02 08:35:54

文件操作數據源

2022-07-10 23:15:46

Go語言內存

2022-08-01 07:57:03

數組操作內存

2012-04-14 20:47:45

Android

2021-12-16 12:01:21

區塊鏈Libra貨幣

2021-07-31 11:40:55

Openresty開源

2021-02-20 08:05:35

代碼效率C++

2014-02-25 08:59:14

2021-11-09 23:54:19

開發SMI Linkerd
點贊
收藏

51CTO技術棧公眾號

国产激情在线| 久久久国产精品成人免费| 91视频亚洲| 亚洲一区在线观看免费| 久久精品第九区免费观看 | 激情久久综合网| 丁香影院在线| 亚洲欧洲精品一区二区三区不卡| 豆国产97在线| 国产亚洲欧美在线精品| 91精品婷婷色在线观看| 亚洲精品美女久久| 玖玖爱视频在线| 天堂av在线网| 亚洲黄色av一区| 日韩hmxxxx| 日本高清视频免费观看| 激情综合色播五月| 国产91在线高潮白浆在线观看| 丝袜 亚洲 另类 欧美 重口| 亚洲区小说区图片区qvod按摩| 欧美一二三区在线观看| 无码人妻h动漫| 色图在线观看| 国产精品久久久久国产精品日日| 久久99欧美| 精品国产无码一区二区三区| 免费日本视频一区| 日本欧美中文字幕| 中文在线观看免费网站| 自由日本语亚洲人高潮| 中文字幕久精品免费视频| 黄色免费视频网站| 日韩在线亚洲| 欧美一区二区三区的| 91香蕉视频污版| 亚洲免费福利| 精品日韩视频在线观看| 亚洲精品蜜桃久久久久久| 久久bbxx| 日韩毛片视频在线看| 视频二区一区| 超碰97在线免费观看| 91免费在线视频观看| 国产区一区二区| 亚洲精品911| 国产激情一区二区三区四区| 91香蕉亚洲精品| 国产精品无码粉嫩小泬| 另类av一区二区| 992tv在线成人免费观看| 久久久久成人精品无码| 永久亚洲成a人片777777| 久久久精品国产一区二区| 二区三区四区视频| 99热在线成人| 美女少妇精品视频| 人妻人人澡人人添人人爽| 天天做天天爱天天爽综合网| 久久手机免费视频| 曰本女人与公拘交酡| 国内精品久久久久久久97牛牛| 欧美国产日韩视频| 亚欧洲精品在线视频| 99精品免费| 2019精品视频| 亚洲无码精品一区二区三区| 日本欧美一区二区| 国产欧美日韩高清| 国产人妖在线播放| 国产69精品久久99不卡| 国产一区二区中文字幕免费看| 日本精品一区二区在线观看| 91美女精品福利| 日韩欧美一区二区视频在线播放 | 日韩有码在线电影| www.99re7| 狠狠入ady亚洲精品| 2020国产精品视频| 一级黄色小视频| 国产传媒欧美日韩成人| 久久久久久欧美精品色一二三四| 国产三级电影在线| 亚洲色图视频免费播放| 欧美这里只有精品| 韩国成人漫画| 欧美一区二区三区视频在线观看| 亚洲天堂av网站| 欧美色爱综合| 色中色综合影院手机版在线观看 | 国内老司机av在线| 欧美性猛交xxxx免费看漫画| 超碰超碰在线观看| 99久久人爽人人添人人澡| 亚洲男人天堂网| 亚洲色偷偷综合亚洲av伊人| 亚洲国产清纯| 国产欧美一区二区三区视频| 亚洲欧美另类视频| 欧美高清在线一区| 国产一级不卡视频| 成人mm视频在线观看| 精品成人一区二区三区四区| 久久久视频6r| 精品二区久久| 成人两性免费视频| 蜜桃免费在线| 亚洲国产精品久久久男人的天堂| 亚洲综合在线网站| a级日韩大片| 日韩资源在线观看| 日韩特级黄色片| 国产福利精品一区二区| 视频一区视频二区视频三区高| 激情在线视频播放| 欧美色老头old∨ideo| 喷水视频在线观看| 午夜天堂精品久久久久| 国产人妖伪娘一区91| 日韩私人影院| 精品久久久久久久久久久久久 | 99久久免费观看| 国产精品蜜月aⅴ在线| 亚洲美女在线看| 国产在线视频在线观看| 美女任你摸久久| 日本视频精品一区| 国模精品视频| 亚洲а∨天堂久久精品喷水| 中文字幕五月天| 九色综合国产一区二区三区| 午夜一区二区三区| 精品国产免费人成网站| 亚洲国模精品私拍| 久久婷婷国产麻豆91| 国产一区二区在线视频| 亚洲视频电影| 四虎地址8848精品| 中文字幕精品av| 国产精品成人久久久| 91首页免费视频| 国产老熟妇精品观看| 国产精品主播在线观看| 国语自产精品视频在线看抢先版图片| 国产av精国产传媒| 亚洲精品欧美综合四区| 色婷婷一区二区三区在线观看| 欧美一区电影| 国产精品一区二区久久国产| 91caoporm在线视频| 欧美特级限制片免费在线观看| 国产精品国产三级国产专业不| 男人的天堂亚洲在线| 日本不卡一区二区三区在线观看 | 色综合久久影院| 欧美三级电影精品| 中文字幕美女视频| 精品一区二区在线看| 欧美性受黑人性爽| 日韩一二三区在线观看| 久久久视频免费观看| 深爱五月激情五月| 欧美三级欧美成人高清www| 熟女俱乐部一区二区视频在线| 天堂在线亚洲视频| 亚洲国产成人不卡| 日韩精品中文字幕吗一区二区| 欧美日本黄视频| 天天躁日日躁狠狠躁喷水| 精品国产老师黑色丝袜高跟鞋| 波多野结衣办公室33分钟| 日韩高清在线不卡| 国产大尺度在线观看| 中文一区二区三区四区| 26uuu亚洲伊人春色| 在线观看av的网站| 欧美电视剧在线看免费| www..com国产| 国产精品系列在线| 在线观看你懂的视频| 99热精品在线| 亚洲国产一区二区精品视频| 九九99久久精品在免费线bt| 午夜精品理论片| lutube成人福利在线观看| 91精品国产免费久久综合| 日韩黄色在线视频| 中文幕一区二区三区久久蜜桃| 亚洲国产欧美日韩在线| 国自产拍偷拍福利精品免费一 | 麻豆av电影在线观看| 欧美精品久久久久久久多人混战| 久一视频在线观看| 国产欧美日韩不卡免费| 一级黄色高清视频| 亚洲综合日本| 色哟哟免费网站| 欧美日韩夜夜| 亚洲综合中文字幕在线| 欧美xxx性| 欧美日韩国产成人| 2019中文字幕在线视频| 日韩欧美亚洲另类制服综合在线| 91video| 尤物在线观看一区| 人人爽人人爽人人片| 懂色av噜噜一区二区三区av| www.com黄色片| 亚洲一区日本| 国产爆乳无码一区二区麻豆| 青青草原综合久久大伊人精品| 国产亚洲情侣一区二区无| 综合久久av| 国产精品成人品| 成人性生交大片免费看网站| 精品国偷自产在线视频| 韩国中文免费在线视频| 亚洲高清福利视频| 国产情侣在线播放| 欧美日韩一区二区三区四区| 一级一片免费看| 精品国产91久久久| 曰本女人与公拘交酡| 136国产福利精品导航| 日本一级免费视频| 91看片淫黄大片一级| 亚洲欧美日韩色| 国产成人精品亚洲午夜麻豆| 91福利免费观看| 奇米色一区二区| 精品久久久久久中文字幕2017| 在线综合欧美| 国产白丝袜美女久久久久| 欧美日韩视频一区二区三区| 黑人巨大国产9丨视频| 97国产成人高清在线观看| 午夜午夜精品一区二区三区文| 国产一区二区三区四区| 欧美激情第一页在线观看| 日韩av午夜| 精品国产综合久久| 免费观看成人www动漫视频| 国产精品区一区| 国产日韩三级| 国产一区二区在线观看免费播放| 国产成人av毛片| 国产伦精品一区二区三区高清版| 成人免费直播在线| 国产福利久久精品| 国产精品15p| 麻豆精品传媒视频| 亚洲第一二三区| 日本一区二区三区四区高清视频| av在线不卡顿| 一区二区精品视频| 91精品国产91久久久久久密臀| 在线观看欧美激情| 伊人青青综合网| 欧美高清中文字幕| 国产日韩欧美| 精品国产成人av在线免| 日韩电影一二三区| www.成人黄色| 中文字幕第24页| 国产suv精品一区二区三区| 真实乱偷全部视频| 成人午夜看片网址| 日本黄色网址大全| 国产欧美日韩精品a在线观看| 亚洲色图27p| 一区二区三区日韩欧美精品 | 欧美日韩另类字幕中文| 欧美日韩一二三四区| 91福利精品视频| 91麻豆国产视频| 日韩你懂的在线播放| 欧美在线 | 亚洲| 亚洲天堂av女优| 国产区在线观看| 97色在线视频观看| 国产极品一区| 国产欧美亚洲日本| 国语产色综合| 97超碰人人爱| 亚洲在线电影| 视频区 图片区 小说区| 99亚偷拍自图区亚洲| av在线免费播放网址| 性欧美疯狂xxxxbbbb| 中国老头性行为xxxx| 欧美精品一区二区三区视频| av电影在线观看| 高清一区二区三区四区五区| 国产精品诱惑| 狠狠色综合网站久久久久久久| 欧美黄色大片在线观看| 国产特级黄色大片| 国产尤物一区二区| 精品无码一区二区三区| 亚洲男人都懂的| 国产亚洲欧美在线精品| 日韩欧美一区二区久久婷婷| 欧美91精品久久久久国产性生爱| 欧美xxxx做受欧美.88| 日韩欧美一区二区三区在线观看 | 色999日韩| 成人免费观看cn| 精一区二区三区| 国产精品无码久久久久久| 一区二区三区成人| 亚洲最新av网站| 亚洲女人天堂视频| 2021天堂中文幕一二区在线观| 成人久久一区二区| 不卡日本视频| 久久久久久久久久久免费视频| 国产成人免费视频网站高清观看视频| 免费成人深夜天涯网站| 午夜视频在线观看一区| 国产夫妻在线观看| 中文字幕不卡在线视频极品| 在线看的毛片| 高清不卡一区二区三区| 亚洲九九视频| 亚洲一级免费在线观看| 久久久精品综合| 亚洲欧美在线视频免费| 日韩免费视频一区| 含羞草www国产在线视频| 国产精品久久电影观看| 女厕嘘嘘一区二区在线播放| 国产v片免费观看| 不卡的电视剧免费网站有什么| 欧美极品aaaaabbbbb| 69成人精品免费视频| 欧美性天天影视| 国产专区精品视频| 日韩片欧美片| 亚洲一级免费在线观看| 国产精品美女久久久久aⅴ国产馆| 三级网站在线播放| 亚洲女同精品视频| 久久精品女人天堂av免费观看 | 91在线不卡| 国产精品久久久久aaaa九色| 久久99性xxx老妇胖精品| 99久久激情视频| 国产欧美1区2区3区| 羞羞色院91蜜桃| 中文字幕精品一区久久久久 | 日韩精品午夜视频| av中文字幕免费观看| 日本久久精品电影| 成人av毛片| 国产免费成人av| 中文在线日韩| 亚洲精品久久一区二区三区777| 亚洲地区一二三色| 欧美日韩在线中文字幕| 国产成人精品久久久| 日本一区二区免费高清| 久久6免费视频| 亚洲一区二区在线视频| 欧美一区二区三区激情| 日本在线观看天堂男亚洲| 欧美日韩国产传媒| 午夜剧场高清版免费观看| 亚洲女与黑人做爰| 丰满大乳国产精品| 日本伊人精品一区二区三区介绍| 日韩综合在线| 中文字幕18页| 日韩欧美在线视频免费观看| 91se在线| 国产精品一区二区欧美黑人喷潮水| 男女av一区三区二区色多| 无码人中文字幕| 精品日韩在线观看| 欧美男体视频| 免费观看国产视频在线| 99精品国产一区二区三区不卡| 自拍偷拍第八页| 久久久久成人精品| 国产一区二区三区探花| 亚欧精品在线视频| 大桥未久av一区二区三区| 91啦中文在线| 国产视频不卡| 国内一区二区视频| 丰满少妇乱子伦精品看片| 最好看的2019年中文视频| 北条麻妃在线一区二区免费播放| 老熟妇仑乱视频一区二区| 亚洲麻豆国产自偷在线| 韩日视频在线| 国产伦精品一区二区三区照片91| 麻豆极品一区二区三区| 欧美精品亚洲精品日韩精品| 久久久www成人免费精品张筱雨| 五月综合久久|