3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码 优化 指南 实践

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码 优化 指南 实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C代碼優化方案

?

?

?

?

?

?

?

?

?

?

華中科技大學計算機學院

?

姓名:??? 王全明

QQ?????? 375288012

Email????quanming1119@163.com


目錄

目錄

C代碼優化方案

1、選擇合適的算法和數據結構

2、使用盡量小的數據類型

3、減少運算的強度

(1)、查表(游戲程序員必修課)

(2)、求余運算

(3)、平方運算

(4)、用移位實現乘除法運算

(5)、避免不必要的整數除法

(6)、使用增量和減量操作符

(7)、使用復合賦值表達式

(8)、提取公共的子表達式

4、結構體成員的布局

(1)按數據類型的長度排序

(2)把結構體填充成最長類型長度的整倍數

(3)按數據類型的長度排序本地變量

(4)把頻繁使用的指針型參數拷貝到本地變量

5、循環優化

(1)、充分分解小的循環

(2)、提取公共部分

(3)、延時函數

(4)、while循環和do…while循環

(6)、循環展開

(6)、循環嵌套

(7)、Switch語句中根據發生頻率來進行case排序

(8)、將大的switch語句轉為嵌套switch語句

(9)、循環轉置

(10)、公用代碼塊

(11)提升循環的性能

(12)、選擇好的無限循環

6、提高CPU的并行性

(1)使用并行代碼

(2)避免沒有必要的讀寫依賴

7、循環不變計算

8、函數

(1)Inline函數

(2)不定義不使用的返回值

(3)減少函數調用參數

(4)所有函數都應該有原型定義

(5)盡可能使用常量(const)

(6)把本地函數聲明為靜態的(static)

9、采用遞歸

10、變量

(1)register變量

(2)、同時聲明多個變量優于單獨聲明變量

(3)、短變量名優于長變量名,應盡量使變量名短一點

(4)、在循環開始前聲明變量

11、使用嵌套的if結構


C代碼優化方案

1、選擇合適的算法和數據結構

選擇一種合適的數據結構很重要,如果在一堆隨機存放的數中使用了大量的插入和刪除指令,那使用鏈表要快得多。數組與指針語句具有十分密切的關系,一般來說,指針比較靈活簡潔,而數組則比較直觀,容易理解。對于大部分的編譯器,使用指針比使用數組生成的代碼更短,執行效率更高。

在許多種情況下,可以用指針運算代替數組索引,這樣做常常能產生又快又短的代碼。與數組索引相比,指針一般能使代碼速度更快,占用空間更少。使用多維數組時差異更明顯。下面的代碼作用是相同的,但是效率不一樣。

??? 數組索引???????????????指針運算

??? For(;;){??????????????? p=array

??? A=array[t++];????????? for(;;){

??????????????????????????????? a=*(p++);

?? ?。。。。。。。。。?????????????????。。。。。。

??? }????????????????????? }

指針方法的優點是,array的地址每次裝入地址p后,在每次循環中只需對p增量操作。在數組索引方法中,每次循環中都必須根據t值求數組下標的復雜運算。

2、使用盡量小的數據類型

能夠使用字符型(char)定義的變量,就不要使用整型(int)變量來定義;能夠使用整型變量定義的變量就不要用長整型(long int),能不使用浮點型(float)變量就不要使用浮點型變量。當然,在定義變量后不要超過變量的作用范圍,如果超過變量的范圍賦值,C編譯器并不報錯,但程序運行結果卻錯了,而且這樣的錯誤很難發現。

ICCAVR中,可以在Options中設定使用printf參數,盡量使用基本型參數(%c%d%x%X%u%s格式說明符),少用長整型參數(%ld%lu%lx%lX格式說明符),至于浮點型的參數(%f)則盡量不要使用,其它C編譯器也一樣。在其它條件不變的情況下,使用%f參數,會使生成的代碼的數量增加很多,執行速度降低。

3、減少運算的強度

(1)、查表(游戲程序員必修課)

一個聰明的游戲大蝦,基本上不會在自己的主循環里搞什么運算工作,絕對是先計算好了,再到循環里查表。看下面的例子:

舊代碼:

??? long factorial(int i)

??? {

??????? if (i == 0)

??????????? return 1;

??????? else

??????????? return i * factorial(i - 1);

??? }

新代碼:

??? static long factorial_table[] =

??????? {1 1 2 6 24 120 720 ?/* etc */ };

??? long factorial(int i)

??? {

??????? return factorial_table[i];

??? }

如果表很大,不好寫,就寫一個init函數,在循環外臨時生成表格。

(2)、求余運算

??? a=a%8;

可以改為:

??? a=a&7;

說明:位操作只需一個指令周期即可完成,而大部分的C編譯器的“%”運算均是調用子程序來完成,代碼長、執行速度慢。通常,只要求是求2n方的余數,均可使用位操作的方法來代替。

(3)、平方運算

??? a=pow(a, 2.0);

可以改為:

??? a=a*a;

說明:在有內置硬件乘法器的單片機中(51系列),乘法運算比求平方運算快得多,因為浮點數的求平方是通過調用子程序來實現的,在自帶硬件乘法器的AVR單片機中,如ATMega163中,乘法運算只需2個時鐘周期就可以完成。既使是在沒有內置硬件乘法器的AVR單片機中,乘法運算的子程序比平方運算的子程序代碼短,執行速度快。

如果是求3次方,如:

??? a=pow(a30);

更改為:

??? a=a*a*a

則效率的改善更明顯。

(4)、用移位實現乘除法運算

??? a=a*4;

??? b=b/4;

可以改為:

??? a=a<<2;

??? b=b>>2;

通常如果需要乘以或除以2n,都可以用移位的方法代替。在ICCAVR中,如果乘以2n,都可以生成左移的代碼,而乘以其它的整數或除以任何數,均調用乘除法子程序。用移位的方法得到代碼比調用乘除法子程序生成的代碼效率高。實際上,只要是乘以或除以一個整數,均可以用移位的方法得到結果,如:

??? a=a*9

可以改為:

a=(a<<3)+a

采用運算量更小的表達式替換原來的表達式,下面是一個經典例子:

舊代碼:

??? x = w % 8;

??? y = pow(x 2.0);

??? z = y * 33;

??? for (i = 0;i < MAX;i++)

??? {

??????? h = 14 * i;

??????? printf("%d" h);

??? }

新代碼:

??? x = w & 7;????????????? /* 位操作比求余運算快 */

??? y = x * x; ????????????? /* 乘法比平方運算快 */

??? z = (y << 5) + y; ???????? /* 位移乘法比乘法快 */

??? for (i = h = 0; i < MAX; i++)

??? {

??????? h += 14;??????????????? /* 加法比乘法快 */

??????? printf("%d" h);

}

(5)、避免不必要的整數除法

  整數除法是整數運算中最慢的,所以應該盡可能避免。一種可能減少整數除法的地方是連除,這里除法可以由乘法代替。這個替換的副作用是有可能在算乘積時會溢出,所以只能在一定范圍的除法中使用。

  ???????? 不好的代碼:

int i j k m

m = i / j / k

???????????? 推薦的代碼:

int i j k m

m = i / (j * k)

(6)、使用增量和減量操作符

??? 在使用到加一和減一操作時盡量使用增量和減量操作符,因為增量符語句比賦值語句更快,原因在于對大多數CPU來說,對內存字的增、減量操作不必明顯地使用取內存和寫內存的指令,比如下面這條語句:

x=x+1;

模仿大多數微機匯編語言為例,產生的代碼類似于:

??? move Ax????? ;x從內存取出存入累加器A

??? add A1??????? ;累加器A1

store x????????? ;把新值存回x

如果使用增量操作符,生成的代碼如下:

??? incr x?????????? ;x1

顯然,不用取指令和存指令,增、減量操作執行的速度加快,同時長度也縮短了。

(7)、使用復合賦值表達式

復合賦值表達式(a-=1a+=1)都能夠生成高質量的程序代碼。

(8)、提取公共的子表達式

在某些情況下,C++編譯器不能從浮點表達式中提出公共的子表達式,因為這意味著相當于對表達式重新排序。需要特別指出的是,編譯器在提取公共子表達式前不能按照代數的等價關系重新安排表達式。這時,程序員要手動地提出公共的子表達式(在VC.NET里有一項“全局優化”選項可以完成此工作,但效果就不得而知了)。

不好的代碼:

float a b c d e f

。。。

e = b * c / d

f = b / d * a

推薦的代碼:

float a b c d e f

。。。

const float t(b / d)

e = c * t

f = a * t

?

不好的代碼:

float a b c e f

。。。

e = a / c

f = b / c

推薦的代碼:

float a b c e f

。。。

const float t(1.0f / c)

e = a * t

f = b * t

4、結構體成員的布局

  很多編譯器有“使結構體字,雙字或四字對齊”的選項。但是,還是需要改善結構體成員的對齊,有些編譯器可能分配給結構體成員空間的順序與他們聲明的不同。但是,有些編譯器并不提供這些功能,或者效果不好。所以,要在付出最少代價的情況下實現最好的結構體和結構體成員對齊,建議采取下列方法:

(1)按數據類型的長度排序

把結構體的成員按照它們的類型長度排序,聲明成員時把長的類型放在短的前面。編譯器要求把長型數據類型存放在偶數地址邊界。在申明一個復雜的數據類型 (既有多字節數據又有單字節數據)時,應該首先存放多字節數據,然后再存放單字節數據,這樣可以避免內存的空洞。編譯器自動地把結構的實例對齊在內存的偶數邊界。

(2)把結構體填充成最長類型長度的整倍數

把結構體填充成最長類型長度的整倍數。照這樣,如果結構體的第一個成員對齊了,所有整個結構體自然也就對齊了。下面的例子演示了如何對結構體成員進行重新排序:

不好的代碼,普通順序:

struct

{

  ???????????? ????????????? char a[5]

  ?????? long k

  double x

} baz

?

推薦的代碼,新的順序并手動填充了幾個字節:

struct

{

  ???????????? ?????? ?????? double x

  ???????????? ????????????? long k

  ???????????? ????????????? char a[5]

char pad[7]

} baz

這個規則同樣適用于類的成員的布局。

(3)按數據類型的長度排序本地變量

當編譯器分配給本地變量空間時,它們的順序和它們在源代碼中聲明的順序一樣,和上一條規則一樣,應該把長的變量放在短的變量前面。如果第一個變量對齊了,其它變量就會連續的存放,而且不用填充字節自然就會對齊。有些編譯器在分配變量時不會自動改變變量順序,有些編譯器不能產生4字節對齊的棧,所以4字節可能不對齊。下面這個例子演示了本地變量聲明的重新排序:

  ????? ?????? 不好的代碼,普通順序

short ga gu gi

long foo bar

double x y z[3]

char a b

float baz

推薦的代碼,改進的順序

double z[3]

double x y

long foo bar

float baz

short ga gu gi?

(4)把頻繁使用的指針型參數拷貝到本地變量

避免在函數中頻繁使用指針型參數指向的值。因為編譯器不知道指針之間是否存在沖突,所以指針型參數往往不能被編譯器優化。這樣數據不能被存放在寄存器中,而且明顯地占用了內存帶寬。注意,很多編譯器有“假設不沖突”優化開關(在VC里必須手動添加編譯器命令行/Oa/Ow),這允許編譯器假設兩個不同的指針總是有不同的內容,這樣就不用把指針型參數保存到本地變量。否則,請在函數一開始把指針指向的數據保存到本地變量。如果需要的話,在函數結束前拷貝回去。

不好的代碼:

// 假設 q != r

void isqrt(unsigned long a unsigned long* q unsigned long* r)

{

  *q = a

  if (a > 0)

  {

    while (*q > (*r = a / *q))

    {

      *q = (*q + *r) >> 1

    }

  }

  *r = a - *q * *q

}

?

推薦的代碼:

// 假設 q != r

void isqrt(unsigned long a unsigned long* q unsigned long* r)

{

  unsigned long qq rr

  qq = a

  if (a > 0)

  {

    while (qq > (rr = a / qq))

    {

      qq = (qq + rr) >> 1

    }

  }

  rr = a - qq * qq

  *q = qq

  *r = rr

}

5、循環優化

(1)、充分分解小的循環

  要充分利用CPU的指令緩存,就要充分分解小的循環。特別是當循環體本身很小的時候,分解循環可以提高性能。注意:很多編譯器并不能自動分解循環。 不好的代碼:

// 3D轉化:把矢量 V 4x4 矩陣 M相乘

for (i = 0 i < 4 i ++)

{

  r[i] = 0

  for (j = 0 j < 4 j ++)

  {

    r[i] += M[j][i]*V[j]

  }

}

推薦的代碼:

r[0] = M[0][0]*V[0] + M[1][0]*V[1] + M[2][0]*V[2] + M[3][0]*V[3]

r[1] = M[0][1]*V[0] + M[1][1]*V[1] + M[2][1]*V[2] + M[3][1]*V[3]

r[2] = M[0][2]*V[0] + M[1][2]*V[1] + M[2][2]*V[2] + M[3][2]*V[3]

r[3] = M[0][3]*V[0] + M[1][3]*V[1] + M[2][3]*V[2] + M[3][3]*v[3]

(2)、提取公共部分

對于一些不需要循環變量參加運算的任務可以把它們放到循環外面,這里的任務包括表達式、函數的調用、指針運算、數組訪問等,應該將沒有必要執行多次的操作全部集合在一起,放到一個init的初始化程序中進行。

(3)、延時函數

通常使用的延時函數均采用自加的形式:

??? void delay (void)

??? {

unsigned int i;

??? for (i=0;i<1000;i++) ;

??? }

將其改為自減延時函數:

??? void delay (void)

??? {

unsigned int i;

??????? for (i=1000;i>0;i--) ;

??? }

兩個函數的延時效果相似,但幾乎所有的C編譯對后一種函數生成的代碼均比前一種代碼少1~3個字節,因為幾乎所有的MCU均有為0轉移的指令,采用后一種方式能夠生成這類指令。在使用while循環時也一樣,使用自減指令控制循環會比使用自加指令控制循環生成的代碼更少1~3個字母。但是在循環中有通過循環變量“i”讀寫數組的指令時,使用預減循環有可能使數組超界,要引起注意。

(4)、while循環和do…while循環

while循環時有以下兩種循環形式:

unsigned int i;

??? i=0;

??? while (i<1000)

??? {

??????? i++;

?? ??????? //用戶程序

??? }

或:

unsigned int i;

??? i=1000;

do

{

??? ????? i--;

??? ????? //用戶程序

}

while (i>0);

在這兩種循環中,使用dowhile循環編譯后生成的代碼的長度短于while循環。

(6)、循環展開

這是經典的速度優化,但許多編譯程序(gcc -funroll-loops)能自動完成這個事,所以現在你自己來優化這個顯得效果不明顯。

舊代碼:

for (i = 0; i < 100; i++)

{

do_stuff(i);

}

新代碼:

for (i = 0; i < 100; )

{

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

do_stuff(i); i++;

}

可以看出,新代碼里比較指令由100次降低為10次,循環時間節約了90%不過注意:對于中間變量或結果被更改的循環,編譯程序往往拒絕展開,(怕擔責任唄),這時候就需要你自己來做展開工作了。

還有一點請注意,在有內部指令cacheCPU(MMX芯片),因為循環展開的代碼很大,往往cache溢出,這時展開的代碼會頻繁地在CPUcache和內存之間調來調去,又因為cache速度很高,所以此時循環展開反而會變慢。還有就是循環展開會影響矢量運算優化。

(6)、循環嵌套

把相關循環放到一個循環里,也會加快速度。

舊代碼:

for (i = 0; i < MAX; i++) ? ?????? /* initialize 2d array to 0's */

??? for (j = 0; j < MAX; j++)

??????? a[i][j] = 0.0;

??? for (i = 0; i < MAX; i++) ?????? /* put 1's along the diagonal */

??????? a[i][i] = 1.0;

?

新代碼:

for (i = 0; i < MAX; i++) ? ?????? /* initialize 2d array to 0's */

{

??? for (j = 0; j < MAX; j++)

??????? a[i][j] = 0.0;

??? a[i][i] = 1.0; ???????????? ????????????? /* put 1's along the diagonal */

}

(7)、Switch語句中根據發生頻率來進行case排序

Switch 可能轉化成多種不同算法的代碼。其中最常見的是跳轉表比較鏈/。當switch用比較鏈的方式轉化時,編譯器會產生if-else-if的嵌套代碼,并按照順序進行比較,匹配時就跳轉到滿足條件的語句執行。所以可以對case的值依照發生的可能性進行排序,把最有可能的放在第一位,這樣可以提高性能。此外,在case中推薦使用小的連續的整數,因為在這種情況下,所有的編譯器都可以把switch轉化成跳轉表。

不好的代碼:

int days_in_month short_months normal_months long_months

。。。。。。

switch (days_in_month)

{

  case 28:

  case 29:

    short_months ++

    break

  case 30:

    normal_months ++

    break

  case 31:

    long_months ++

    break

  default:

    cout << "month has fewer than 28 or more than 31 days" << endl

    break

}

?

推薦的代碼:

int days_in_month short_months normal_months long_months

。。。。。。

switch (days_in_month)

{

  case 31:

    long_months ++

    break

  case 30:

    normal_months ++

    break

  case 28:

  case 29:

    short_months ++

    break

  default:

    cout << "month has fewer than 28 or more than 31 days" << endl

    break

}? ?

(8)、將大的switch語句轉為嵌套switch語句

switch語句中的case標號很多時,為了減少比較的次數,明智的做法是把大switch語句轉為嵌套switch語句。把發生頻率高的case標號放在一個switch語句中,并且是嵌套switch語句的最外層,發生相對頻率相對低的case標號放在另一個switch語句中。比如,下面的程序段把相對發生頻率低的情況放在缺省的case標號內。

pMsg=ReceiveMessage();

??????? switch (pMsg->type)

??????? {

??????? case FREQUENT_MSG1:

??????? handleFrequentMsg();

??????? break;

??????? case FREQUENT_MSG2:

??????? handleFrequentMsg2();

??????? break;

??????? 。。。。。。

??????? case FREQUENT_MSGn:

??????? handleFrequentMsgn();

??????? break;

??????? default:????????????????????//嵌套部分用來處理不經常發生的消息

??????? switch (pMsg->type)

??????? {

??????? case INFREQUENT_MSG1:

??????? handleInfrequentMsg1();

??????? break;

??????? case INFREQUENT_MSG2:

??????? handleInfrequentMsg2();

??????? break;

??????? 。。。。。。

??????? case INFREQUENT_MSGm:

??????? handleInfrequentMsgm();

??????? break;

??????? }

??????? }

如果switch中每一種情況下都有很多的工作要做,那么把整個switch語句用一個指向函數指針的表來替換會更加有效,比如下面的switch語句,有三種情況:

??? enum MsgType{Msg1 Msg2 Msg3}

??????? switch (ReceiveMessage()

??????? {

??????? case Msg1;

??????? 。。。。。。

???? ???case Msg2;

??????? 。。。。。

??????? case Msg3;

??????? 。。。。。

??????? }

為了提高執行速度,用下面這段代碼來替換這個上面的switch語句。

??????? /*準備工作*/

??????? int handleMsg1(void);

??????? int handleMsg2(void);

??????? int handleMsg3(void);

??????? /*創建一個函數指針數組*/

??????? int (*MsgFunction [])()={handleMsg1 handleMsg2 handleMsg3};

??????? /*用下面這行更有效的代碼來替換switch語句*/

??????? status=MsgFunction[ReceiveMessage()]();

(9)、循環轉置

有些機器對JNZ(0轉移)有特別的指令處理,速度非常快,如果你的循環對方向不敏感,可以由大向小循環。

舊代碼:

? ?? ?????? ??for (i = 1; i <= MAX; i++)

????? ?????? ? {

???? ???????? ????????????? ?。。。

??? ???????????? ?????? ??}

新代碼:

? ?? ?????? ??i = MAX+1;

?? ?????? ?while (--i)

??? ???????????? ?????? ?{

??????? ???? ????????????? 。。。

??? ???????????? ?????? ?}

不過千萬注意,如果指針操作使用了i值,這種方法可能引起指針越界的嚴重錯誤(i = MAX+1;)。當然你可以通過對i做加減運算來糾正,但是這樣就起不到加速的作用,除非類似于以下情況:

舊代碼:

??? char a[MAX+5];

??? for (i = 1; i <= MAX; i++)

??? {

?????? ?*(a+i+4)=0;

??? }

新代碼:

??? i = MAX+1;

??? while (--i)

??? {

??????? *(a+i+4)=0;

}

(10)、公用代碼塊

一些公用處理模塊,為了滿足各種不同的調用需要,往往在內部采用了大量的if-then-else結構,這樣很不好,判斷語句如果太復雜,會消耗大量的時間的,應該盡量減少公用代碼塊的使用。(任何情況下,空間優化和時間優化都是對立的--東樓)。當然,如果僅僅是一個(3==x)之類的簡單判斷,適當使用一下,也還是允許的。記住,優化永遠是追求一種平衡,而不是走極端。

(11)提升循環的性能

要提升循環的性能,減少多余的常量計算非常有用(比如,不隨循環變化的計算)。

不好的代碼(for()中包含不變的if())

for( i 。。。 )

{

  if( CONSTANT0 )

  {

    DoWork0( i )// 假設這里不改變CONSTANT0的值

  }

  else

  {

    DoWork1( i )// 假設這里不改變CONSTANT0的值

  }

}

推薦的代碼:

if( CONSTANT0 )

{

  for( i 。。。 )

  {

    DoWork0( i )

  }

}

else

{

  for( i 。。。 )

  {

    DoWork1( i )

  }

}?

如果已經知道if()的值,這樣可以避免重復計算。雖然不好的代碼中的分支可以簡單地預測,但是由于推薦的代碼在進入循環前分支已經確定,就可以減少對分支預測的依賴。

(12)、選擇好的無限循環

在編程中,我們常常需要用到無限循環,常用的兩種方法是while (1) for (;;)。這兩種方法效果完全一樣,但那一種更好呢?然我們看看它們編譯后的代碼:

編譯前:

while (1)

編譯后:

mov eax1

test eaxeax

je foo+23h

jmp foo+18h?

編譯前:

for (;;)

編譯后:

jmp foo+23h

顯然,for (;;)指令少,不占用寄存器,而且沒有判斷、跳轉,比while (1)好。

6、提高CPU的并行性

(1)使用并行代碼

盡可能把長的有依賴的代碼鏈分解成幾個可以在流水線執行單元中并行執行的沒有依賴的代碼鏈。很多高級語言,包括C++,并不對產生的浮點表達式重新排序,因為那是一個相當復雜的過程。需要注意的是,重排序的代碼和原來的代碼在代碼上一致并不等價于計算結果一致,因為浮點操作缺乏精確度。在一些情況下,這些優化可能導致意料之外的結果。幸運的是,在大部分情況下,最后結果可能只有最不重要的位(即最低位)是錯誤的。

不好的代碼:

double a[100] sum

int i

sum = 0.0f

for (i=0 i<100 i++)

sum += a[i]

?

推薦的代碼:

double a[100] sum1 sum2 sum3 sum4 sum

int i

sum1 = sum2 = sum3 = sum4 = 0.0

for (i = 0 i < 100 i += 4)

{

  sum1 += a[i]

  sum2 += a[i+1]

  sum3 += a[i+2]

  sum4 += a[i+3]

}

sum = (sum4+sum3)+(sum1+sum2)?

  要注意的是:使用4 路分解是因為這樣使用了4段流水線浮點加法,浮點加法的每一個段占用一個時鐘周期,保證了最大的資源利用率。

(2)避免沒有必要的讀寫依賴

當數據保存到內存時存在讀寫依賴,即數據必須在正確寫入后才能再次讀取。雖然AMD AthlonCPU有加速讀寫依賴延遲的硬件,允許在要保存的數據被寫入內存前讀取出來,但是,如果避免了讀寫依賴并把數據保存在內部寄存器中,速度會更快。在一段很長的又互相依賴的代碼鏈中,避免讀寫依賴顯得尤其重要。如果讀寫依賴發生在操作數組時,許多編譯器不能自動優化代碼以避免讀寫依賴。所以推薦程序員手動去消除讀寫依賴,舉例來說,引進一個可以保存在寄存器中的臨時變量。這樣可以有很大的性能提升。下面一段代碼是一個例子:

不好的代碼:

float x[VECLEN] y[VECLEN] z[VECLEN]

。。。。。。

for (unsigned int k = 1 k < VECLEN k ++)

{

  x[k] = x[k-1] + y[k]

}

for (k = 1 k <VECLEN k++)

{

  x[k] = z[k] * (y[k] - x[k-1])

}

推薦的代碼:

float x[VECLEN] y[VECLEN] z[VECLEN]

。。。。。。

float t(x[0])

for (unsigned int k = 1 k < VECLEN k ++)

{

  t = t + y[k]

  x[k] = t

}

t = x[0]

for (k = 1 k < VECLEN k ++)

{

  t = z[k] * (y[k] - t)

  x[k] = t

}?

7、循環不變計算

對于一些不需要循環變量參加運算的計算任務可以把它們放到循環外面,現在許多編譯器還是能自己干這件事,不過對于中間使用了變量的算式它們就不敢動了,所以很多情況下你還得自己干。對于那些在循環中調用的函數,凡是沒必要執行多次的操作通通提出來,放到一個init函數里,循環前調用。另外盡量減少喂食次數,沒必要的話盡量不給它傳參,需要循環變量的話讓它自己建立一個靜態循環變量自己累加,速度會快一點。

還有就是結構體訪問,東樓的經驗,凡是在循環里對一個結構體的兩個以上的元素執行了訪問,就有必要建立中間變量了(結構這樣,那C++的對象呢?想想看),看下面的例子:

舊代碼:

??? total =

??? a->b->c[4]->aardvark +

??? a->b->c[4]->baboon +

??? a->b->c[4]->cheetah +

??? a->b->c[4]->dog;

新代碼:

??? struct animals * temp = a->b->c[4];

??? total =

??? temp->aardvark +

??? temp->baboon +

??? temp->cheetah +

??? temp->dog;

一些老的C語言編譯器不做聚合優化,而符合ANSI規范的新的編譯器可以自動完成這個優化,看例子:

??? float a b c d f g;

??? 。。。

??? a = b / c * d;

??? f = b * g / c;

這種寫法當然要得,但是沒有優化

??? float a b c d f g;

??? 。。。

??? a = b / c * d;

??? f = b / c * g;

如果這么寫的話,一個符合ANSI規范的新的編譯器可以只計算b/c一次,然后將結果代入第二個式子,節約了一次除法運算。

8、函數優化

?(1)Inline函數

C++中,關鍵字Inline可以被加入到任何函數的聲明中。這個關鍵字請求編譯器用函數內部的代碼替換所有對于指出的函數的調用。這樣做在兩個方面快于函數調用:第一,省去了調用指令需要的執行時間;第二,省去了傳遞變元和傳遞過程需要的時間。但是使用這種方法在優化程序速度的同時,程序長度變大了,因此需要更多的ROM使用這種優化在Inline函數頻繁調用并且只包含幾行代碼的時候是最有效的。

(2)不定義不使用的返回值

函數定義并不知道函數返回值是否被使用,假如返回值從來不會被用到,應該使用void來明確聲明函數不返回任何值。

(3)減少函數調用參數

??? 使用全局變量比函數傳遞參數更加有效率。這樣做去除了函數調用參數入棧和函數完成后參數出棧所需要的時間。然而決定使用全局變量會影響程序的模塊化和重入,故要慎重使用。

(4)所有函數都應該有原型定義

一般來說,所有函數都應該有原型定義。原型定義可以傳達給編譯器更多的可能用于優化的信息。

(5)盡可能使用常量(const)

盡可能使用常量(const)C++標準規定,如果一個const聲明的對象的地址不被獲取,允許編譯器不對它分配儲存空間。這樣可以使代碼更有效率,而且可以生成更好的代碼。

(6)把本地函數聲明為靜態的(static)

  如果一個函數只在實現它的文件中被使用,把它聲明為靜態的(static)以強制使用內部連接。否則,默認的情況下會把函數定義為外部連接。這樣可能會影響某些編譯器的優化——比如,自動內聯。

9、采用遞歸

與LISP之類的語言不同,C語言一開始就病態地喜歡用重復代碼循環,許多C程序員都是除非算法要求,堅決不用遞歸。事實上,C編譯器們對優化遞歸調用一點都不反感,相反,它們還很喜歡干這件事。只有在遞歸函數需要傳遞大量參數,可能造成瓶頸的時候,才應該使用循環代碼,其他時候,還是用遞歸好些。

10、變量

(1)register變量

在聲明局部變量的時候可以使用register關鍵字。這就使得編譯器把變量放入一個多用途的寄存器中,而不是在堆棧中,合理使用這種方法可以提高執行速度。函數調用越是頻繁,越是可能提高代碼的速度。

在最內層循環避免使用全局變量和靜態變量,除非你能確定它在循環周期中不會動態變化,大多數編譯器優化變量都只有一個辦法,就是將他們置成寄存器變量,而對于動態變量,它們干脆放棄對整個表達式的優化。盡量避免把一個變量地址傳遞給另一個函數,雖然這個還很常用。C語言的編譯器們總是先假定每一個函數的變量都是內部變量,這是由它的機制決定的,在這種情況下,它們的優化完成得最好。但是,一旦一個變量有可能被別的函數改變,這幫兄弟就再也不敢把變量放到寄存器里了,嚴重影響速度。看例子:

a = b();

c(&d);

因為d的地址被c函數使用,有可能被改變,編譯器不敢把它長時間的放在寄存器里,一旦運行到c(&d),編譯器就把它放回內存,如果在循環里,會造成N次頻繁的在內存和寄存器之間讀寫d的動作,眾所周知,CPU在系統總線上的讀寫速度慢得很。比如你的賽楊300,CPU主頻300,總線速度最多66M,為了一個總線讀,CPU可能要等4-5個周期,得。。得。。得。。想起來都打顫。

(2)、同時聲明多個變量優于單獨聲明變量

(3)、短變量名優于長變量名,應盡量使變量名短一點

(4)、在循環開始前聲明變量

11、使用嵌套的if結構

在if結構中如果要判斷的并列條件較多,最好將它們拆分成多個if結構,然后嵌套在一起,這樣可以避免無謂的判斷。


說明:

上面的優化方案由王全明收集整理。很多資料來源與網上,出處不祥,在此對所有作者一并致謝!

該方案主要是考慮到在嵌入式開發中對程序執行速度的要求特別高,所以該方案主要是為了優化程序的執行速度

注意:優化是有側重點的,優化是一門平衡的藝術,它往往要以犧牲程序的可讀性或者增加代碼長度為代價。

(任何情況下,空間優化和時間優化都是對立的--東樓)


2.?

代碼優化概要

我編寫程序至今有35年了,我做了很多關于程序執行速度方面優化的工( 一個示例),我也看過其它人做的優化。我發現有兩個最基本的優化技術總是被人所忽略。 注意,這兩個技術并不是避免時機不成熟的優化。并不是把冒泡排序變成快速排序(算法優化)。也不是語言或是編譯器的優化。也不是把 i*4寫成i<<2 的優化。 這兩個技術是:
  • 使用 一個profiler。
  • 查看程序執行時的匯編碼。
  • 使用這兩個技術的人將會成功地寫出運行快的代碼,不會使用這兩個技術的人則不行。下面讓我為你細細道來。

    使用一個 Profiler

    我們知道,程序運行時的90%的時間是用在了10%的代碼上。我發現這并不準確。一次又一次地,我發現,幾乎所有的程序會在1%的代碼上花了99%的運行時間。但是,是哪個1%?一個好的Profiler可以告訴你這個答案。就算我們需要使用100個小時在這1%的代碼上進行優化,也比使用100個小時在其它99%的代碼上優化產生的效益要高得多得多。 問題是什么?人們不用profiler?不是。我工作過的一個地方使用了一個華麗而奢侈的Profiler,但是自從購買這個Profiler后,它的包裝3年來還是那么的暫新。為什么人們不用?我真的不知道。有一次,我和我的同事去了一個負載過大的交易所,我同事堅持說他知道哪里是瓶頸,畢竟,他是一個很有經驗的專家。最終,我把我的Profiler在他的項目上運行了一下,我們發現那個瓶頸完全在一個意想不到的地方。 就像是賽車一樣。團隊是贏在傳感器和日志上,這些東西提供了所有的一切。你可以調整一下賽車手的褲子以讓其在比賽過程中更舒服,但是這不會讓你贏得比賽,也不會讓你更有競爭力。如果你不知道你的速度上不去是因為引擎、排氣裝置、空體動力學、輪胎氣壓,或是賽車手,那么你將無法獲勝。編程為什么會不同呢?只要沒有測量,你就永遠無法進步。 這個世界上有太多可以使用的Profiler了。隨便找一個你就可以看到你的函數的調用層次,調用的次數,以前每條代碼的時間分解表(甚至可以到匯編級)。我看過太多的程序員回避使用Profiler,而是把時間花在那些無用的,錯誤的方向上的“優化”,而被其競爭對手所羞辱。(譯者陳皓注:使用Profiler時,重點需要關注:1)花時間多的函數以優化其算法,2)調用次數巨多的函數——如果一個函數每秒被調用300K次,你只需要優化出0.001毫秒,那也是相當大的優化。這就是作者所謂的1%的代碼占用了99%的CPU時間)

    查看匯編代碼

    幾年前,我有一個同事,Mary Bailey,她在華盛頓大學教矯正代數(remedial algebra),有一次,她在黑板上寫下: x + 3 = 5 然后問他的學生“求解x”,然后學生們不知道答案。于是她寫下:__ + 3 = 5 然后,再問學生“填空”,所有的學生都可以回答了。未知數x就像是一個有魔法的字母讓大家都在想“x意味著代數,而我沒有學過代數,所以我就不知道這個怎么做”。 匯編程序就是編程世界的代數。如果某人問我“inline函數是否被編譯器展開了?”或是問我“如果我寫下i*4,編譯器會把其優化為左移位操作嗎?”。這個時候,我都會建議他們看看編譯器的匯編碼。這樣的回答是不是很粗暴和無用?通常,在我這樣回答了提問者后,提問都通常都會說,對不起,我不知道什么是匯編!甚至C++的專家都會這么回答。 匯編語言是最簡單的編程語言了(就算是和C++相比也是這樣的),如:

    ADD ESI,x

    就是(C風格的代碼)

    ESI += x;

    而:

    CALL foo

    則是:

    foo();

    細節因為CPU的種類而不同,但這就是其如何工作的。有時候,我們甚至都不需要細節,只需要看看匯編碼的長啥樣,然后和源代碼比一比,你就可以知道匯編代碼很多很多了。 那么,這又如何幫助代碼優化?舉個例子,我幾年前認識一個程序員認為他應該去發現一個新的更快的算法。他有一個benchmark來證明這個算法,并且其寫了一篇非常漂亮的文章關于他的這個算法。但是,有人看了一下其原來算法以及新算法的匯編,發現了他的改進版本的算法允許其編譯器把兩個除法操作變成了一個。這和算法真的沒有什么關系。我們知道除法操作是一個很昂貴的操作,并且在其算法中,這倆個除法操作還在一個內嵌循環中,所以,他的改進版的算法當然要快一些。但,只需要在原來的算法上做一點點小的改動——使用一個除法操作,那么其原來的算法將會和新的一樣快。而他的新發現什么也不是。 下一個例子,一個D用戶張貼了一個 benchmark 來顯示 dmd (Digital Mars D 編譯器)在整型算法上的很糟糕,而ldc (LLVM D 編譯器) 就好很多了。對于這樣的結果,其相當的有意見。我迅速地看了一下匯編,發現兩個編譯器編譯出來相當的一致,并沒有什么明顯的東西要對2:1這么大的不同而負責。但是我們看到有一個對long型整數的除法,這個除法調用了運行庫。而這個庫成為消耗時間的殺手,其它所有的加減法都沒有速度上的影響。出乎意料地,benchmark 和算法代碼生成一點關系也沒有,完全就是long型整數的除法的問題。這暴露了在dmd的運行庫中的long型除法的實現很差。修正后就可以提高速度。所以,這和編譯器沒有什么關系,但是如果不看匯編,你將無法發現這一切。 查看匯編代碼經常會給你一些意想不到的東西讓你知道為什么程序的性能是那樣。一些意想不到的函數調用,預料不到的自傲,以及不應該存在的東西,等等其實所有的一切。但也不需要成為一個匯編代碼的黑客才能干的事。

    結論

    如果你覺得需要程序有更好的執行速度,那么,最基本的方法就是使用一個profiler和愿意去查看一下其匯編代碼以找到程序的瓶頸。只有找到了程序的瓶頸,此時才是真正在思考如何去改進的時候,比如思考一個更好的算法,使用更快的語言優化,等等。 常規的做法是制勝法寶是挑選一個最佳的算法而不是進行微優化。雖然這種做法是無可異議的,但是有兩件事情是學校沒有教給你而需要你重點注意的。第一個也是最重要的,如果你優化的算法沒沒有參與到你程序性能中的算法,那么你優化他只是在浪費時間和精力,并且還轉移了你的注意力讓你錯過了應該要去優化的部分。第二點,算法的性能總和處理的數據密切相關的,就算是冒泡排序有那么多的笑柄,但是如果其處理的數據基本是排好序的,只有其中幾個數據是未排序的,那么冒泡排序也是所有排序算法里性能最好的。所以,擔心沒有使用好的算法而不去測量,只會浪費時間,無論是你的還是計算機的。 就好像賽車零件的訂購速底是不會讓你更靠進冠軍(就算是你正確安裝零件也不會),沒有Profiler,你不會知道問題在哪里,不去看匯編,你可能知道問題所在,但你往往不知道為什么。 (全文完)


    3.?

    優化代碼

    通過優化可執行文件,可在較快執行速度和較小代碼大小之間實現平衡。 本主題討論了 Visual C++ 提供的可幫助您優化代碼的一些機制。

    語言功能

    下面的主題介紹了 C/C++ 語言中的一些優化功能。

    優化雜注和關鍵字

    可在代碼中使用以提高性能的關鍵字和雜注的列表。

    按類別列出的編譯器選項

    專門影響執行速度或代碼大小的 /O 編譯器選項的列表。

    Rvalue Reference Declarator: &&

    Rvalue 引用支持移動語義的實現。 如果移動語義用于實現模板庫,則使用這些模板的應用程序的性能可顯著提高。

    優化雜注

    如果經過優化的某個代碼節導致錯誤或速度減慢,則可以使用 optimize 雜注對該代碼節關閉優化。

    用兩個雜注將代碼括起來,如下所示:

    #pragma optimize("", off) // some code here #pragma optimize("", on) 編程慣例

    在用優化的方式編譯代碼時,您可能會注意到一些附加的警告消息。 此行為是預期行為,因為一些警告僅與優化的代碼有關。 如果您注意到這些警告,則可以避免許多優化問題。

    矛盾的是,為了速度而對程序進行優化可能會導致代碼運行速度減慢。 這是因為一些為了速度而進行的優化會增加代碼大小。 例如,內聯函數可消除函數調用的開銷。但是內聯太多代碼可能會使程序很大,致使虛擬內存頁的錯誤數增加。 因此,通過消除函數調用獲得的速度可能會丟失在內存交調中。

    下面的主題討論了良好的編程做法。

    提高時間關鍵代碼的技巧

    更好的編碼技術可產生更好的性能。 本主題建議了一些可幫助您確保時間關鍵代碼部分的執行令人滿意的編碼技術。

    優化最佳做法

    提供了有關如何以最佳方式優化應用程序的一般準則。

    調試優化的代碼

    由于優化可能會更改編譯器創建的代碼,因此建議您調試應用程序并測量其性能,隨后優化代碼。

    下面的主題提供有關如何進行調試的基本信息。

    • 使用 Visual Studio 進行調試

    • 創建發行版本時遇到的常見問題

    下面的主題提供有關如何進行調試的更高級信息。

    • 如何:調試優化的代碼

    • 為何浮點數可能丟失精度

    以下各個主題提供有關如何優化生成、加載和執行代碼的信息。

    • 提高編譯器吞吐量

    • 使用沒有 () 的函數名不產生代碼

    • Optimizing Inline Assembly

    • 為 ATL 項目指定編譯器優化

    • 加載時應使用哪些優化技術來提高客戶端應用程序的性能?

    • 有關以下內容的更多信息如何縮短 DLL 方法加載時間的更多信息,請參見 MSDN 庫網站上的“MSDN 雜志”中“Under the Hood”(深入實質)專欄下的“Optimizing DLL Load Time Performance”(優化 DLL 加載時間性能)。

    • 有關以下內容的更多信息如何在應用程序中最大程度減少分頁的更多信息,請參見 MSDN 庫 網站上的“MSDN 雜志”中“Bugslayer”專欄下的“Improving Runtime Performance with the Smooth Working Set Tool”(使用 Smooth 工作集工具提高運行時性能)和“Improving Runtime Performance with the Smooth Working Set Tool—Part 2”(使用 Smooth 工作集工具提高運行時性能(第 2 部分))。


    4.?

    C++代碼優化方法總結

    優化是一個非常大的主題,本文并不是去深入探討性能分析理論,算法的效率,況且我也沒有這個能力。我只是想把一些可以簡單的應用到你的C++代碼中的優化技術總結在這里,這樣,當你遇到幾種不同的編程策略的時候,就可以對每種策略的性能進行一個大概的估計。這也是本文的目的之所在。

    一. 優化之前
    在進行優化之前,我們首先應該做的是發現我們代碼的瓶頸(bottleneck)在哪里。然而當你做這件事情的時候切忌從一個debug-version進行推斷,因為debug-version中包含了許多額外的代碼。一個debug-version可執行體要比release-version大出40%。那些額外的代碼都是用來支持調試的,比如說符號的查找。大多數實現都為debug-version和release-version提供了不同的operator new以及庫函數。而且,一個release-version的執行體可能已經通過多種途徑進行了優化,包括不必要的臨時對象的消除,循環展開,把對象移入寄存器,內聯等等。
    另外,我們要把調試和優化區分開來,它們是在完成不同的任務。 debug-version 是用來追捕bugs以及檢查程序是否有邏輯上的問題。release-version則是用來做一些性能上的調整以及進行優化。
    下面就讓我們來看看有哪些代碼優化技術吧:

    二. 聲明的放置
    程序中變量和對象的聲明放在什么位置將會對性能產生顯著影響。同樣,對postfix和prefix運算符的選擇也會影響性能。這一部分我們集中討論四個問題:初始化v.s 賦值,在程序確實要使用的地方放置聲明,構造函數的初始化列表,prefix v.s postfix運算符。
    (1) 請使用初始化而不是賦值
    在C語言中只允許在一個函數體的開頭進行變量的聲明,然而在C++中聲明可以出現在程序的任何位置。這樣做的目的是希望把對象的聲明拖延到確實要使用它的時候再進行。這樣做可以有兩個好處:1. 確保了對象在它被使用前不會被程序的其他部分惡意修改。如果對象在開頭就被聲明然而卻在20行以后才被使用的話,就不能做這樣的保證。2. 使我們有機會通過用初始化取代賦值來達到性能的提升,從前聲明只能放在開頭,然而往往開始的時候我們還沒有獲得我們想要的值,因此初始化所帶來的好處就無法被應用。但是現在我們可以在我們獲得了想要的值的時候直接進行初始化,從而省去了一步。注意,或許對于基本類型來說,初始化和賦值之間可能不會有什么差異,但是對于用戶定義的類型來說,二者就會帶來顯著的不同,因為賦值會多進行一次函數調用----operator =。因此當我們在賦值和初始化之間進行選擇的話,初始化應該是我們的首選。
    (2) 把聲明放在合適的位置上
    在一些場合,通過移動聲明到合適的位置所帶來的性能提升應該引起我們足夠的重視。例如:
    bool is_C_Needed();
    void use()
    {
    C c1;
    if (is_C_Needed() == false)
    {
    return; //c1 was not needed
    }
    //use c1 here
    return;
    }
    上面這段代碼中對象c1即使在有可能不使用它的情況下也會被創建,這樣我們就會為它付出不必要的花費,有可能你會說一個對象c1能浪費多少時間,但是如果是這種情況呢:C c1[1000];我想就不是說浪費就浪費了。但是我們可以通過移動聲明c1的位置來改變這種情況:
    void use()
    {
    if (is_C_Needed() == false)
    {
    return; //c1 was not needed
    }
    C c1; //moved from the block"s beginning
    //use c1 here
    return;
    }
    怎么樣,程序的性能是不是已經得到很大的改善了呢?因此請仔細分析你的代碼,把聲明放在合適的位置上,它所帶來的好處是你難以想象的。
    (3) 初始化列表
    我們都知道,初始化列表一般是用來初始化const或者reference數據成員。但是由于他自身的性質,我們可以通過使用初始化列表來實現性能的提升。我們先來看一段程序:
    class Person
    {
    private:
    C c_1;
    C c_2;
    public:
    Person(const C & c1, const C& c2 ): c_1(c1), c_2(c2) {}
    };
    當然構造函數我們也可以這樣寫:
    Person::Person(const C& c1, const C& c2)
    {
    c_1 = c1;
    c_2 = c2;
    }
    那么究竟二者會帶來什么樣的性能差異呢,要想搞清楚這個問題,我們首先要搞清楚二者是如何執行的,先來看初始化列表:數據成員的聲明操作都是在構造函數執行之前就完成了,在構造函數中往往完成的只是賦值操作,然而初始化列表直接是在數據成員聲明的時候就進行了初始化,因此它只執行了一次copy constructor。再來看在構造函數中賦值的情況:首先,在構造函數執行前會通過default constructor創建數據成員,然后在構造函數中通過operator =進行賦值。因此它就比初始化列表多進行了一次函數調用。性能差異就出來了。但是請注意,如果你的數據成員都是基本類型的話,那么為了程序的可讀性就不要使用初始化列表了,因為編譯器對兩者產生的匯編代碼是相同的。
    (4) postfix VS prefix 運算符
    prefix運算符++和—比它的postfix版本效率更高,因為當postfix運算符被使用的時候,會需要一個臨時對象來保存改變以前的值。對于基本類型,編譯器會消除這一份額外的拷貝,但是對于用戶定義類型,這似乎是不可能的。因此請你盡可能使用prefix運算符。

    三. 內聯函數
    內聯函數既能夠去除函數調用所帶來的效率負擔又能夠保留一般函數的優點。然而,內聯函數并不是萬能藥,在一些情況下,它甚至能夠降低程序的性能。因此在使用的時候應該慎重。
    1.我們先來看看內聯函數給我們帶來的好處:從一個用戶的角度來看,內聯函數看起來和普通函數一樣,它可以有參數和返回值,也可以有自己的作用域,然而它卻不會引入一般函數調用所帶來的負擔。另外,它可以比宏更安全更容易調試。
    當然有一點應該意識到,inline specifier僅僅是對編譯器的建議,編譯器有權利忽略這個建議。那么編譯器是如何決定函數內聯與否呢?一般情況下關鍵性因素包括函數體的大小,是否有局部對象被聲明,函數的復雜性等等。
    2.那么如果一個函數被聲明為inline但是卻沒有被內聯將會發生什么呢?理論上,當編譯器拒絕內聯一個函數的時候,那個函數會像普通函數一樣被對待,但是還會出現一些其他的問題。例如下面這段代碼:
    // filename Time.h
    #include<ctime>
    #include<iostream>
    using namespace std;
    class Time
    {
    public:
    inline void Show() { for (int i = 0; i <10; i++) cout<<time(0)<<endl;}
    };
    因為成員函數Time::Show()包括一個局部變量和一個for循環,所以編譯器一般拒絕inline,并且把它當作一個普通的成員函數。但是這個包含類聲明的頭文件會被單獨的#include進各個獨立的編譯單元中:
    // filename f1.cpp
    #include "Time.hj"
    void f1()
    {
    Time t1;
    t1.Show();
    }

    // filename f2.cpp
    #include "Time.h"
    void f2()
    {
    Time t2;
    t2.Show();
    }
    結果編譯器為這個程序生成了兩個相同成員函數的拷貝:
    void f1();
    void f2();
    int main()
    {
    f1();
    f2();
    return 0;
    }
    當程序被鏈接的時候,linker將會面對兩個相同的Time::Show()拷貝,于是函數重定義的連接錯誤發生。但是老一些的C++實現對付這種情況的辦法是通過把一個un-inlined函數當作static來處理。因此每一份函數拷貝僅僅在自己的編譯單元中可見,這樣鏈接錯誤就解決了,但是在程序中卻會留下多份函數拷貝。在這種情況下,程序的性能不但沒有提升,反而增加了編譯和鏈接時間以及最終可執行體的大小。
    但是幸運的是,新的C++標準中關于un-inlined函數的說法已經改變。一個符合標準C++實現應該只生成一份函數拷貝。然而,要想所有的編譯器都支持這一點可能還需要很長時間。
    另外關于內聯函數還有兩個更令人頭疼的問題。第一個問題是該如何進行維護。一個函數開始的時候可能以內聯的形式出現,但是隨著系統的擴展,函數體可能要求添加額外的功能,結果內聯函數就變得不太可能,因此需要把inline specifier去除以及把函數體放到一個單獨的源文件中。另一個問題是當內聯函數被應用在代碼庫的時候產生。當內聯函數改變的時候,用戶必須重新編譯他們的代碼以反映這種改變。然而對于一個非內聯函數,用戶僅僅需要重新鏈接就可以了。
    這里想要說的是,內聯函數并不是一個增強性能的靈丹妙藥。只有當函數非常短小的時候它才能得到我們想要的效果,但是如果函數并不是很短而且在很多地方都被調用的話,那么將會使得可執行體的體積增大。最令人煩惱的還是當編譯器拒絕內聯的時候。在老的實現中,結果很不盡人意,雖然在新的實現中有很大的改善,但是仍然還是不那么完善的。一些編譯器能夠足夠的聰明來指出哪些函數可以內聯哪些不能,但是,大多數編譯器就不那么聰明了,因此這就需要我們的經驗來判斷。如果內聯函數不能增強行能,就避免使用它!

    四. 優化你的內存使用
    通常優化都有幾個方面:更快的運行速度,有效的系統資源使用,更小的內存使用。一般情況下,代碼優化都是試圖在以上各個方面進行改善。重新放置聲明技術被證明是消除多余對象的建立和銷毀,這樣既減小了程序的大小又加快了運行速度。然而其他的優化技術都是基于一個方面------更快的速度或者是更小的內存使用。有時,這些目標是互斥的,壓縮了內存的使用往往卻減慢了代碼速度,快速的代碼卻又需要更多的內存支持。下面總結兩種在內存使用上的優化方法:
    1. Bit Fields
    在C/C++中都可以存取和訪問數據的最小組成單元:bit。因為bit并不是C/C++基本的存取單元,所以這里是通過犧牲運行速度來減少內存和輔助存儲器的空間的使用。注意:一些硬件結構可能提供了特殊的處理器指令來存取bit,因此bit fields是否影響程序的速度取決于具體平臺。
    在我們的現實生活中,一個數據的許多位都被浪費了,因為某些應用根本就不會有那么大的數據范圍。也許你會說,bit是如此之小,通過它就能減小存儲空間的使用嗎?的確,在數據量很小的情況下不會看出什么效果,但是在數據量驚人的情況下,它所節省的空間還是能夠讓我們的眼睛為之一亮的。也許你又會說,現在內存和硬盤越來越便宜,何苦要費半天勁,這省不了幾個錢。但是還有另外一個原因一定會使你信服,那就是數字信息傳輸。一個分布式數據庫都會在不同的地點有多份拷貝。那么數百萬的紀錄傳輸就會顯得十分昂貴。Ok,現在我們就來看看該如何做吧,首先看下面這段代碼:
    struct BillingRec
    {
    long cust_id;
    long timestamp;
    enum CallType
    {
    toll_free,
    local,
    regional,
    long_distance,
    international,
    cellular
    } type;
    enum CallTariff
    {
    off_peak,
    medium_rate,
    peak_time
    } tariff;
    };
    上面這個結構體在32位的機器上將會占用16字節,你會發現其中有許多位都被浪費了,尤其是那兩個enum型,浪費更是嚴重,所以請看下面做出的改進:
    struct BillingRec
    {
    int cust_id: 24; // 23 bits + 1 sign bit
    int timestamp: 24;
    enum CallType
    {//...
    };
    enum CallTariff
    {//...
    };
    unsigned call: 3;
    unsigned tariff: 2;
    };
    現在一個數據從16字節縮減到了8字節,減少了一半,怎么樣,效果還是顯著的吧:)
    2. Unions
    Unions通過把兩個或更多的數據成員放置在相同地址的內存中來減少內存浪費,這就要求在任何時間只能有一個數據成員有效。Union 可以有成員函數,包括構造函數和析構函數,但是它不能有虛函數。C++支持anonymous unions。anonymous union是一個未命名類型的未命名對象。例如:
    union { long n; void * p}; // anonymous
    n = 1000L; // members are directly accessed
    p = 0; // n is now also 0
    不像命名的union,它不能有成員函數以及非public的數據成員。
    那么unions什么時候是有用的呢?下面這個類從數據庫中獲取一個人的信息。關鍵字既可以是一個特有的ID或者人名,但是二者卻不能同時有效:
    class PersonalDetails
    {
    private:
    char * name;
    long ID;
    //...
    public:
    PersonalDetails(const char *nm); //key is of type char * used
    PersonalDetails(long id) : ID(id) {} //numeric key used
    };
    上面這段代碼中就會造成內存的浪費,因為在一個時間只能有一個關鍵字有效。anonymous union可以在這里使用來減少內存的使用,例如:
    class PersonalDetails
    {
    private:
    union //anonymous
    {
    char * name;
    long ID;
    };
    public:
    PersonalDetails(const char *nm);
    PersonalDetails(long id) : ID(id) {/**/} // direct access to a member
    //...
    };
    通過使用union,PersonalDetails類的大小被減半。但是這里要說明的是,節省4 個字節內存并不值得引入union所帶來的麻煩,除非這個類作為數百萬數據庫記錄的類型或者紀錄在一條很慢的通信線路傳輸。值得注意的是unions并不引入任何運行期負擔,所以這里不會有什么速度上的損失。anonymous union的優點就是它的成員可以被直接訪問。

    五. 速度優化
    在一些對速度要求非常苛刻的應用系統中,每一個CPU周期都是要爭取的。這個部分展現了一些簡單方法來進行速度優化。
    1. 使用類來包裹長的參數列表
    一個函數調用的負擔將會隨著參數列表的增長而增加。運行時系統不得不建立堆棧來存儲參數值;通常,當參數很多的時候,這樣一個操作就會花費很長的時間。
    把參數列表包裹進一個單獨的類中并且通過引用進行傳遞,這樣將會節省很多的時間。當然,如果函數本身就很長,那么建立堆棧的時間就可以忽略了,因此也就沒有必要這樣做。然而,對于那些執行時間很短而且經常被調用的函數來說,包裹一個長的參數列表在對象中并且通過引用傳遞將會提高性能。
    2. 寄存器變量
    register specifier被用來告訴編譯器一個對象將被會非常多的使用,可以把它放入寄存器中。例如:
    void f()
    {
    int *p = new int[3000000];
    register int *p2 = p; //store the address in a register
    for (register int j = 0; j <3000000; j++)
    {
    *p2++ = 0;
    }
    //...use p
    delete [] p;
    }
    循環計數是應用寄存器變量的最好的候選者。當它們沒有被存入一個寄存器中,大部分的循環時間都被用在了從內存中取出變量和給變量賦新值上。如果把它存入一個寄存器中的話,將會大大減少這種負擔。需要注意的是,register specifier僅僅是對編譯器的一個建議。就好比內聯函數一樣,編譯器可以拒絕把一個對象存儲到寄存器中。另外,現代的編譯器都會通過把變量放入寄存器中來優化循環計數。Register storage specifier并不僅僅局限在基本類型上,它能夠被應用于任何類型的對象。如果對象太大而不能裝進寄存器的話,編譯器仍然能夠把它放入一個高速存儲器中,例如cache。
    用register storage specifier聲明函數型參將會是建議編譯器把實參存入寄存器中而不是堆棧中。例如:

    void f(register int j, register Date d);

    3. 把那些保持不變的對象聲明為const
    通過把對象聲明為const,編譯器就可以利用這個聲明把這樣一個對象放入寄存器中。
    4. Virtual function的運行期負擔
    當調用一個virtual function,如果編譯器能夠解決調用的靜態化,將不會引入額外的負擔。另外,一個非常短的虛函數可以被內聯處理。在下面這個例子中,一個聰明的編譯器能夠做到靜態調用虛函數:
    #include <iostream>
    using namespace std;
    class V
    {
    public:
    virtual void show() const { cout <<"I"m V"<<endl; }
    };
    class W : public V
    {
    public:
    void show() const { cout <<"I"m W"<<endl; }
    };
    void f(V & v, V *pV)
    {
    v.show();
    pV- >show();
    }
    void g()
    {
    V v;
    f(v, &v);
    }
    int main()
    {
    g();
    return 0;
    }
    如果整個程序出現在一個單獨的編譯單元中,編譯器能夠對main()中的g()進行內聯替換。并且在g()中f()的調用也能夠被內聯處理。因為傳給f()的參數的動態類型能夠在編譯期被知曉,因此編譯器能夠把對虛函數的調用靜態化。但是不能保證每個編譯器都這樣做。然而,一些編譯器確實能夠利用在編譯期獲得參數的動態類型從而使得函數的調用在編譯期間就確定了下來,避免了動態綁定的負擔。
    5. Function objects VS function pointers
    用function objects取代function pointers的好處不僅僅局限在能夠泛化和簡單的維護性上。而且編譯器能夠對function object的函數調用進行內聯處理,從而進一步的增強了性能

    六. 最后的求助
    迄今為止為大家展示的優化技術并沒有在設計以及代碼的可讀性上做出妥協。事實上,它們中的一些還提高了軟件的穩固性和可維護性。但是在一些對時間和內存有嚴格限制的軟件開發中,上面的技術可能還不夠;有可能還需要一些會影響軟件的可移植性和擴展性的技術。但是這些技術只能在所有其他的優化技術都被應用但是還不符合要求的情況下使用。
    1. 關閉RTTI和異常處理支持
    當你導入純C代碼給C++編譯器的時候,你可能會發現有一些性能上的損失。這并不是語言或者編譯器的錯誤,而是編譯器作出的一些調整。如果你想獲得和C編譯器同樣的性能,那么請關閉編譯器對RTTI以及異常處理的支持。為什么會這樣呢?因為為了支持RTTI和異常處理,C++編譯器會插入額外的代碼。這樣就增加了可執行體的大小,從而使得效率有所下降。當應用純C代碼的時候,那些額外的代碼是不需要的,所以你可以通過關閉來避免它。
    2. 內聯匯編
    對時間要求苛刻的部分可以用本地匯編來重寫。結果可能是速度上的顯著提高。然而,這個方法不能想當然的就去實施,因為它將使得將來的修改非常的困難。維護代碼的程序員可能對匯編并不了解。如果想要把軟件運行于其他平臺也需要重寫匯編代碼部分。另外,開發和測試匯編代碼是一件辛苦的工作,它將花費更長的時間。
    3. 直接和操作系統進行交互
    API函數可以使你直接與操作系統進行交互。有時,直接執行一個系統命令可能會快許多。出于這個目的,你可以使用標準函數system()。例如,在一個dos/windows系統下,你可以這樣顯示當前目錄下的文件:
    #include <cstdlib>
    using namespace std;
    int main()
    {
    system( "dir"); //execute the "dir" command
    }
    注意:這里是在速度和可移植性以及可擴展性之間做出的折衷。


    5.?

    代碼優化

    所謂代碼優化是指對程序代碼進行等價(指不改變程序的運行結果)變換。程序代碼可以是中間代碼(如四元式代碼),也可以是目標代碼。等價的含義是使得變換后的代碼運行結果與變換前代碼運行結果相同。優化的含義是最終生成的目標代碼短(運行時間更短、占用空間更小),時空效率優化。原則上,優化可以再編譯的各個階段進行,但最主要的一類是對中間代碼進行優化,這類優化不依賴于具體的計算機。

    目錄

    分類
    要點

    編輯本段分類

      編譯過程中可進行的優化可按階段劃分:優化可在編譯的不同階段進行,分為中間代碼一級和目標代碼一級的優化。可按優化涉及的程序范圍劃分:對同一階段,分為局部優化,循環優化和全局優化. 進行優化所需要的基礎是對代碼進行數據流分析和控制流分析。如劃分 DAG,查找循環,分析變量的定值點和引用點等等。最常用的代碼優化技術有刪除多余運算,循環不變代碼外提,強度削弱,變換循環控制條件,合并已知量與復寫傳播,以及刪除無用賦值等等。

    編輯本段要點

      一. 盡量采用 div+css布局您的頁面,div+css布局的好處是讓 搜索引擎爬蟲能夠更順利的,更快的,更友好的爬完您的頁面;div+css布局還可以大量縮減網頁大小,使得代碼更簡潔,流暢,更容易放置更多內容。  二. 盡量縮減您的頁面大小,因為搜索引擎爬蟲每次爬行您的站點時,存儲數據的容量有限,一般建議100 KB以下,越小越好,但不能小于5KB。網頁大小減少還有一個好處,能夠促使您的站點形成巨大的內部鏈接網。  三. 盡量少用無用的圖片和flash。內容索引所派出的搜索引擎爬蟲,不認識圖片,只能根據圖片“ ALT, TITLE”等屬性的內容判斷圖片的內容。對于 flash搜索引擎爬蟲更是視而不見。  四. 盡量滿足w3c標準,網頁代碼的編寫滿足W3C標準,能夠提升網站和搜索引擎的友好度,因為搜索引擎收錄標準,排名算法,都是在 W3C標準的基礎上開發的。  五. 盡量更深層次套用標簽 h1、h2、h3、h4、h5…..,讓搜索引擎能夠分辨清晰網頁那一塊很重要,那一塊次之。  六. 盡量少用 JS,JS代碼全部用外部調用文件封裝。搜索引擎不喜歡JS,影響網站的友好度指數。  七. 盡量不使用表格布局,因為搜索引擎對表格布局嵌套3層以內的內容懶的去抓取。搜索引擎爬蟲有時候也是比較懶的,望各位一定要保持代碼和內容在3層以內。  八. 盡量不讓CSS分散在HTML標記里,盡量封裝到外部調用文件。如果CSS出現在 HTML標記里,搜索引擎爬蟲就要分散注意力去關注這些對優化沒有任何意義的東西,所以建議封裝到專用CSS文件中。  九.清理垃圾代碼,要把代碼編輯環境下敲擊鍵盤上的空格鍵所產生的符號;把一些默認屬性代碼,不會影響顯示的代碼;注釋語句如果對代碼可讀性沒有太大影響,清理這些垃圾代碼,會減少不少的空間。


    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的代码 优化 指南 实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日本精品高清一区二区 | 国产精品99久久精品爆乳 | 亚洲成av人在线观看网址 | 午夜精品一区二区三区在线观看 | 少妇人妻偷人精品无码视频 | 少妇愉情理伦片bd | 人人妻在人人 | 久久精品国产精品国产精品污 | 日本又色又爽又黄的a片18禁 | 久久久久se色偷偷亚洲精品av | 99久久无码一区人妻 | 熟妇激情内射com | 亚洲精品国偷拍自产在线麻豆 | 日本护士毛茸茸高潮 | 亚洲一区二区观看播放 | 任你躁国产自任一区二区三区 | 久久精品人人做人人综合试看 | 国产成人精品久久亚洲高清不卡 | 无码任你躁久久久久久久 | 亚洲aⅴ无码成人网站国产app | 天天摸天天透天天添 | 国内精品久久久久久中文字幕 | 99久久精品日本一区二区免费 | av香港经典三级级 在线 | 欧美国产日产一区二区 | 国产午夜无码精品免费看 | 成人综合网亚洲伊人 | 天天燥日日燥 | 久久综合网欧美色妞网 | 亚洲精品一区二区三区在线观看 | 人人爽人人澡人人高潮 | 国产黄在线观看免费观看不卡 | 亲嘴扒胸摸屁股激烈网站 | 老熟妇乱子伦牲交视频 | 天堂在线观看www | 亚洲一区二区三区无码久久 | 亚洲の无码国产の无码步美 | 久久99热只有频精品8 | 任你躁国产自任一区二区三区 | 国产美女精品一区二区三区 | 人妻互换免费中文字幕 | 精品亚洲成av人在线观看 | 国产精品国产三级国产专播 | 国产福利视频一区二区 | 国产三级久久久精品麻豆三级 | 久久久婷婷五月亚洲97号色 | 无码av免费一区二区三区试看 | 老太婆性杂交欧美肥老太 | 小泽玛莉亚一区二区视频在线 | 久久久久免费精品国产 | 少妇人妻大乳在线视频 | 亚洲a无码综合a国产av中文 | 午夜男女很黄的视频 | 久久伊人色av天堂九九小黄鸭 | 亚洲欧洲日本无在线码 | 无码精品国产va在线观看dvd | 纯爱无遮挡h肉动漫在线播放 | 亚洲日韩av一区二区三区中文 | 97久久超碰中文字幕 | 狠狠色丁香久久婷婷综合五月 | 国产内射爽爽大片视频社区在线 | 亚洲精品无码人妻无码 | 国产suv精品一区二区五 | 色婷婷香蕉在线一区二区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲综合色区中文字幕 | 国产精品无码成人午夜电影 | 亚洲娇小与黑人巨大交 | 国产精品高潮呻吟av久久 | 激情内射亚州一区二区三区爱妻 | 国产精品久久久久久无码 | 国产精品亚洲专区无码不卡 | 97资源共享在线视频 | 亚洲一区二区三区无码久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 国精产品一区二区三区 | 国产成人无码专区 | av无码不卡在线观看免费 | 日韩人妻系列无码专区 | 六十路熟妇乱子伦 | 麻豆人妻少妇精品无码专区 | 日本欧美一区二区三区乱码 | 精品人妻中文字幕有码在线 | 日韩视频 中文字幕 视频一区 | 久久www免费人成人片 | 色情久久久av熟女人妻网站 | 欧美人与物videos另类 | 婷婷色婷婷开心五月四房播播 | 亚洲 欧美 激情 小说 另类 | 97夜夜澡人人爽人人喊中国片 | 色噜噜亚洲男人的天堂 | 99久久久无码国产精品免费 | 九九久久精品国产免费看小说 | 性开放的女人aaa片 | 亚洲日韩av一区二区三区四区 | 欧美变态另类xxxx | 国产内射老熟女aaaa | 日本一卡二卡不卡视频查询 | 亚洲国产欧美国产综合一区 | 九九在线中文字幕无码 | 4hu四虎永久在线观看 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 日韩精品无码免费一区二区三区 | 特黄特色大片免费播放器图片 | 99精品国产综合久久久久五月天 | 午夜熟女插插xx免费视频 | 午夜熟女插插xx免费视频 | 少女韩国电视剧在线观看完整 | 免费国产黄网站在线观看 | 国产精品沙发午睡系列 | 爆乳一区二区三区无码 | 日本乱人伦片中文三区 | 国产两女互慰高潮视频在线观看 | 欧美成人家庭影院 | 久久精品女人的天堂av | 蜜臀av无码人妻精品 | 亚洲色www成人永久网址 | 久久99精品久久久久久 | 欧美三级a做爰在线观看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久精品人妻少妇一区二区三区 | 97久久超碰中文字幕 | 蜜桃臀无码内射一区二区三区 | 在线播放无码字幕亚洲 | 国精产品一品二品国精品69xx | 欧美激情内射喷水高潮 | aⅴ亚洲 日韩 色 图网站 播放 | 日产精品99久久久久久 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产精品va在线观看无码 | 欧美成人高清在线播放 | 荫蒂添的好舒服视频囗交 | 久久婷婷五月综合色国产香蕉 | 国产精品丝袜黑色高跟鞋 | 精品久久久久香蕉网 | 东京一本一道一二三区 | 国产精品毛片一区二区 | 永久免费观看国产裸体美女 | 一本久道高清无码视频 | 一个人看的视频www在线 | 最新版天堂资源中文官网 | 中文无码伦av中文字幕 | 精品人妻中文字幕有码在线 | 亚洲熟女一区二区三区 | 性欧美熟妇videofreesex | 天天拍夜夜添久久精品大 | 午夜精品一区二区三区的区别 | 免费视频欧美无人区码 | 欧美成人午夜精品久久久 | a在线亚洲男人的天堂 | 欧美日韩综合一区二区三区 | 精品国产成人一区二区三区 | 午夜成人1000部免费视频 | 国产精品美女久久久久av爽李琼 | 大肉大捧一进一出视频出来呀 | 欧美黑人巨大xxxxx | 福利一区二区三区视频在线观看 | 99麻豆久久久国产精品免费 | 18黄暴禁片在线观看 | 国产熟妇高潮叫床视频播放 | 激情人妻另类人妻伦 | 免费国产成人高清在线观看网站 | av无码电影一区二区三区 | 成人亚洲精品久久久久软件 | 麻豆国产人妻欲求不满谁演的 | 国产精品igao视频网 | 久久综合狠狠综合久久综合88 | 人妻少妇精品无码专区动漫 | 又色又爽又黄的美女裸体网站 | 亚洲区小说区激情区图片区 | 久久久久亚洲精品中文字幕 | 亚洲精品久久久久avwww潮水 | 亚洲aⅴ无码成人网站国产app | 亚洲熟妇色xxxxx欧美老妇 | 国产在线一区二区三区四区五区 | 成人性做爰aaa片免费看不忠 | 国产激情无码一区二区app | 性欧美牲交xxxxx视频 | 亚洲成色在线综合网站 | 色欲久久久天天天综合网精品 | 久久精品视频在线看15 | 精品国产一区二区三区四区 | 男人和女人高潮免费网站 | 少妇无码吹潮 | 日韩欧美中文字幕公布 | 少妇愉情理伦片bd | 国产麻豆精品一区二区三区v视界 | 一二三四在线观看免费视频 | 人妻少妇精品视频专区 | 精品久久久无码中文字幕 | 无码av最新清无码专区吞精 | 国产精品无码一区二区桃花视频 | 中文字幕乱妇无码av在线 | 亚洲熟女一区二区三区 | 国产绳艺sm调教室论坛 | 精品一区二区三区波多野结衣 | av人摸人人人澡人人超碰下载 | 日本护士毛茸茸高潮 | 天天燥日日燥 | 国产午夜无码精品免费看 | 成人毛片一区二区 | 无码国内精品人妻少妇 | 在教室伦流澡到高潮hnp视频 | 色 综合 欧美 亚洲 国产 | 国产香蕉尹人视频在线 | 娇妻被黑人粗大高潮白浆 | 久久99精品国产麻豆蜜芽 | 成人欧美一区二区三区黑人免费 | 婷婷色婷婷开心五月四房播播 | 中文字幕日产无线码一区 | 久久精品成人欧美大片 | 国产精品99爱免费视频 | 野外少妇愉情中文字幕 | 综合人妻久久一区二区精品 | 亚洲一区二区三区 | 亚洲综合无码久久精品综合 | 捆绑白丝粉色jk震动捧喷白浆 | 乱人伦中文视频在线观看 | 好爽又高潮了毛片免费下载 | 亚洲色大成网站www国产 | 国产艳妇av在线观看果冻传媒 | 午夜福利不卡在线视频 | 三级4级全黄60分钟 | 2020久久超碰国产精品最新 | 成 人 网 站国产免费观看 | 色偷偷人人澡人人爽人人模 | 亚洲人亚洲人成电影网站色 | 亚洲成a人一区二区三区 | 99久久精品国产一区二区蜜芽 | 久久综合九色综合欧美狠狠 | 成在人线av无码免费 | 夜精品a片一区二区三区无码白浆 | 国产办公室秘书无码精品99 | 日本免费一区二区三区最新 | 亚洲精品中文字幕 | 日韩亚洲欧美中文高清在线 | 午夜丰满少妇性开放视频 | 在线播放免费人成毛片乱码 | 2020久久超碰国产精品最新 | 精品厕所偷拍各类美女tp嘘嘘 | 中文字幕精品av一区二区五区 | 国产午夜亚洲精品不卡下载 | 毛片内射-百度 | 色 综合 欧美 亚洲 国产 | 久久99久久99精品中文字幕 | 精品成人av一区二区三区 | 特黄特色大片免费播放器图片 | 日韩人妻无码中文字幕视频 | 少妇性荡欲午夜性开放视频剧场 | 亚洲日本va午夜在线电影 | 免费无码av一区二区 | 乱码av麻豆丝袜熟女系列 | а√天堂www在线天堂小说 | 国产成人精品久久亚洲高清不卡 | 国产又粗又硬又大爽黄老大爷视 | 国产成人无码av片在线观看不卡 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产艳妇av在线观看果冻传媒 | 2020最新国产自产精品 | 欧美性生交活xxxxxdddd | 免费网站看v片在线18禁无码 | 亚洲国产一区二区三区在线观看 | 亚洲爆乳无码专区 | 成人无码精品一区二区三区 | 国产精品亚洲а∨无码播放麻豆 | 久久99精品国产麻豆 | 日本熟妇浓毛 | 国产人成高清在线视频99最全资源 | 国产xxx69麻豆国语对白 | 久久久久久亚洲精品a片成人 | 国产精品国产自线拍免费软件 | 一本久久a久久精品vr综合 | 久久综合网欧美色妞网 | 国产在线aaa片一区二区99 | 国産精品久久久久久久 | 麻花豆传媒剧国产免费mv在线 | 国产另类ts人妖一区二区 | 亚洲一区二区三区四区 | 欧美黑人性暴力猛交喷水 | 亚洲日韩乱码中文无码蜜桃臀网站 | 无码国产色欲xxxxx视频 | 狠狠亚洲超碰狼人久久 | 无码人妻精品一区二区三区下载 | 性生交大片免费看女人按摩摩 | 日韩欧美中文字幕在线三区 | 国产舌乚八伦偷品w中 | 高潮毛片无遮挡高清免费 | 久久人妻内射无码一区三区 | 色欲综合久久中文字幕网 | 日本乱偷人妻中文字幕 | 欧美自拍另类欧美综合图片区 | 成人免费视频一区二区 | 久久精品无码一区二区三区 | 国产人妻久久精品二区三区老狼 | 国产九九九九九九九a片 | 日本大乳高潮视频在线观看 | 乱中年女人伦av三区 | 人妻人人添人妻人人爱 | 日韩av无码中文无码电影 | 性色欲情网站iwww九文堂 | 久久综合香蕉国产蜜臀av | 国内精品人妻无码久久久影院 | 国产精品亚洲综合色区韩国 | 亚洲日韩av一区二区三区四区 | 十八禁视频网站在线观看 | 一本久道久久综合婷婷五月 | 亚洲精品综合一区二区三区在线 | 狠狠色丁香久久婷婷综合五月 | 成在人线av无码免观看麻豆 | 精品久久久久久亚洲精品 | 3d动漫精品啪啪一区二区中 | 18禁黄网站男男禁片免费观看 | 久久综合九色综合97网 | 夜先锋av资源网站 | 国产手机在线αⅴ片无码观看 | 300部国产真实乱 | 欧美亚洲日韩国产人成在线播放 | 撕开奶罩揉吮奶头视频 | 亚洲自偷自拍另类第1页 | 欧洲精品码一区二区三区免费看 | 亚洲国产欧美日韩精品一区二区三区 | 色噜噜亚洲男人的天堂 | 国产亚洲日韩欧美另类第八页 | 99精品视频在线观看免费 | 蜜臀aⅴ国产精品久久久国产老师 | 女高中生第一次破苞av | 亚洲日本va中文字幕 | 九九热爱视频精品 | 亚洲日韩一区二区三区 | 欧美丰满老熟妇xxxxx性 | 乌克兰少妇xxxx做受 | 纯爱无遮挡h肉动漫在线播放 | 亚洲春色在线视频 | 熟女俱乐部五十路六十路av | 欧洲欧美人成视频在线 | 久久无码中文字幕免费影院蜜桃 | 亚洲综合精品香蕉久久网 | 成人影院yy111111在线观看 | 国产成人无码a区在线观看视频app | 青草青草久热国产精品 | 高清不卡一区二区三区 | 午夜时刻免费入口 | 在线播放无码字幕亚洲 | 377p欧洲日本亚洲大胆 | 日韩精品一区二区av在线 | 日日橹狠狠爱欧美视频 | 亚洲国产精品久久人人爱 | 亚洲国产精品成人久久蜜臀 | 亚洲综合久久一区二区 | 又粗又大又硬毛片免费看 | 亚洲大尺度无码无码专区 | 精品国产乱码久久久久乱码 | 亚洲成av人片在线观看无码不卡 | 精品国产一区二区三区四区 | 国产综合在线观看 | 樱花草在线社区www | 丁香啪啪综合成人亚洲 | 人人妻人人澡人人爽欧美一区九九 | 亚洲 另类 在线 欧美 制服 | 日韩精品久久久肉伦网站 | 亚洲日韩一区二区 | 精品偷拍一区二区三区在线看 | 一本色道婷婷久久欧美 | 中文字幕 亚洲精品 第1页 | 无码av中文字幕免费放 | 成人精品视频一区二区三区尤物 | 双乳奶水饱满少妇呻吟 | 国内精品人妻无码久久久影院蜜桃 | 老熟妇乱子伦牲交视频 | 亚欧洲精品在线视频免费观看 | 精品亚洲成av人在线观看 | 日韩精品无码免费一区二区三区 | 欧美日韩人成综合在线播放 | 偷窥村妇洗澡毛毛多 | 在线观看欧美一区二区三区 | 亚洲国产精品久久久久久 | 亚洲色在线无码国产精品不卡 | 国产午夜无码精品免费看 | 毛片内射-百度 | 国产精品免费大片 | 久久久久久av无码免费看大片 | 欧美黑人巨大xxxxx | 人人澡人摸人人添 | 亚洲国产午夜精品理论片 | 亚洲一区二区观看播放 | 美女扒开屁股让男人桶 | 日本护士毛茸茸高潮 | 日韩精品乱码av一区二区 | 精品一区二区三区波多野结衣 | 亚洲色欲色欲天天天www | 奇米影视7777久久精品人人爽 | 乱人伦中文视频在线观看 | ass日本丰满熟妇pics | 亚洲一区二区三区香蕉 | 亚洲经典千人经典日产 | 成人免费视频在线观看 | 色欲人妻aaaaaaa无码 | 国产成人无码av片在线观看不卡 | 欧美午夜特黄aaaaaa片 | 亚洲国产成人av在线观看 | 精品无码一区二区三区爱欲 | 麻豆国产97在线 | 欧洲 | 无码免费一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 欧美人与禽猛交狂配 | 国产超级va在线观看视频 | 国产精品亚洲а∨无码播放麻豆 | 美女极度色诱视频国产 | 亚洲综合久久一区二区 | 亚洲熟妇色xxxxx欧美老妇 | 麻豆国产丝袜白领秘书在线观看 | 综合人妻久久一区二区精品 | 亚洲欧洲日本综合aⅴ在线 | 18禁黄网站男男禁片免费观看 | 中国女人内谢69xxxxxa片 | 少妇性俱乐部纵欲狂欢电影 | 国产午夜精品一区二区三区嫩草 | 亚洲a无码综合a国产av中文 | 麻豆蜜桃av蜜臀av色欲av | 国产在线无码精品电影网 | 亚洲大尺度无码无码专区 | 六月丁香婷婷色狠狠久久 | 色综合久久久久综合一本到桃花网 | 少妇性俱乐部纵欲狂欢电影 | 欧美日本精品一区二区三区 | 国产精品亚洲а∨无码播放麻豆 | 精品厕所偷拍各类美女tp嘘嘘 | 成在人线av无码免费 | 国产高清av在线播放 | 亚洲国精产品一二二线 | 一本色道久久综合亚洲精品不卡 | 99久久久无码国产精品免费 | 亚洲大尺度无码无码专区 | 无码人妻黑人中文字幕 | 免费视频欧美无人区码 | 秋霞成人午夜鲁丝一区二区三区 | 欧美精品在线观看 | 人妻夜夜爽天天爽三区 | 日韩亚洲欧美中文高清在线 | 日日橹狠狠爱欧美视频 | 国产99久久精品一区二区 | 国产精品久久久久7777 | 久久亚洲精品成人无码 | 国产电影无码午夜在线播放 | 美女张开腿让人桶 | 国产精品高潮呻吟av久久4虎 | 日本精品人妻无码77777 天堂一区人妻无码 | 性色欲情网站iwww九文堂 | 美女张开腿让人桶 | 日韩av无码一区二区三区 | 无码国产乱人伦偷精品视频 | 婷婷丁香五月天综合东京热 | 国产精品无码一区二区桃花视频 | 中文字幕精品av一区二区五区 | 国产精品无码成人午夜电影 | 狂野欧美激情性xxxx | 亚洲一区二区观看播放 | av无码电影一区二区三区 | 亚洲精品久久久久久久久久久 | 人人妻人人藻人人爽欧美一区 | 国产在线精品一区二区三区直播 | 荫蒂被男人添的好舒服爽免费视频 | 天堂在线观看www | 欧美人与动性行为视频 | 久久久精品成人免费观看 | 亚洲一区av无码专区在线观看 | 国产亚洲精品精品国产亚洲综合 | 日日橹狠狠爱欧美视频 | 人妻互换免费中文字幕 | 狠狠色丁香久久婷婷综合五月 | 国产av无码专区亚洲a∨毛片 | 亚洲中文字幕乱码av波多ji | 日本饥渴人妻欲求不满 | 亚洲精品国产a久久久久久 | 日日躁夜夜躁狠狠躁 | 丰满护士巨好爽好大乳 | 国产黑色丝袜在线播放 | 欧美一区二区三区 | 久久精品一区二区三区四区 | 欧美性猛交内射兽交老熟妇 | 粗大的内捧猛烈进出视频 | 丰满诱人的人妻3 | 亚洲熟妇自偷自拍另类 | 亚洲综合色区中文字幕 | 亚洲一区二区三区无码久久 | 欧美freesex黑人又粗又大 | 国产97人人超碰caoprom | 人妻少妇精品久久 | 在线a亚洲视频播放在线观看 | 国产另类ts人妖一区二区 | 亚洲精品一区三区三区在线观看 | 欧美日本日韩 | 亚洲成a人一区二区三区 | 男人和女人高潮免费网站 | 99re在线播放 | 精品无人区无码乱码毛片国产 | 色欲人妻aaaaaaa无码 | 天天拍夜夜添久久精品 | 成熟妇人a片免费看网站 | 丰满人妻一区二区三区免费视频 | 欧美 日韩 亚洲 在线 | v一区无码内射国产 | 呦交小u女精品视频 | 国产亚洲精品久久久ai换 | 亚洲小说春色综合另类 | 99久久久无码国产aaa精品 | 国产成人av免费观看 | 国产偷抇久久精品a片69 | 国产欧美亚洲精品a | 中文字幕人妻无码一区二区三区 | 国产亚洲精品久久久久久国模美 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 狂野欧美性猛xxxx乱大交 | 人妻互换免费中文字幕 | 久久久久久久人妻无码中文字幕爆 | 国产精品鲁鲁鲁 | 国产黄在线观看免费观看不卡 | 黑人粗大猛烈进出高潮视频 | 亚洲精品美女久久久久久久 | 国产午夜无码精品免费看 | 女人色极品影院 | 国产精品爱久久久久久久 | 亚洲日本一区二区三区在线 | 久久综合九色综合97网 | 亚洲の无码国产の无码影院 | 少妇性荡欲午夜性开放视频剧场 | 99精品视频在线观看免费 | 久久精品国产一区二区三区肥胖 | 国产猛烈高潮尖叫视频免费 | 亚洲色大成网站www | 精品人妻人人做人人爽夜夜爽 | 国产精品沙发午睡系列 | 97无码免费人妻超级碰碰夜夜 | 在线成人www免费观看视频 | 少妇厨房愉情理9仑片视频 | 久久久国产一区二区三区 | 亚洲天堂2017无码 | 精品无人国产偷自产在线 | 久久综合激激的五月天 | 大乳丰满人妻中文字幕日本 | 日韩精品无码免费一区二区三区 | 色偷偷人人澡人人爽人人模 | 女人高潮内射99精品 | 国产9 9在线 | 中文 | 欧美自拍另类欧美综合图片区 | 巨爆乳无码视频在线观看 | 精品人妻人人做人人爽夜夜爽 | 欧美国产亚洲日韩在线二区 | 亚洲无人区午夜福利码高清完整版 | 欧美成人午夜精品久久久 | 日本一区二区更新不卡 | 亚洲乱码日产精品bd | 日韩亚洲欧美精品综合 | 性史性农村dvd毛片 | www国产亚洲精品久久久日本 | 国产精品国产三级国产专播 | 少妇性l交大片欧洲热妇乱xxx | 亚洲精品无码人妻无码 | 大屁股大乳丰满人妻 | 荫蒂被男人添的好舒服爽免费视频 | 熟女体下毛毛黑森林 | 麻豆国产人妻欲求不满 | 国产无遮挡又黄又爽又色 | 麻豆国产丝袜白领秘书在线观看 | 欧美国产亚洲日韩在线二区 | 内射老妇bbwx0c0ck | 中文字幕乱码中文乱码51精品 | 欧美大屁股xxxxhd黑色 | 免费无码肉片在线观看 | 欧洲vodafone精品性 | 久久婷婷五月综合色国产香蕉 | 国产肉丝袜在线观看 | 国产在线aaa片一区二区99 | 国产午夜手机精彩视频 | 国产xxx69麻豆国语对白 | 少女韩国电视剧在线观看完整 | 亚洲国产高清在线观看视频 | 久久久久久a亚洲欧洲av冫 | 国产办公室秘书无码精品99 | 色爱情人网站 | 粉嫩少妇内射浓精videos | 成在人线av无码免费 | 亚洲中文字幕av在天堂 | 无码人妻av免费一区二区三区 | 宝宝好涨水快流出来免费视频 | 国产精品-区区久久久狼 | 99久久精品无码一区二区毛片 | 色妞www精品免费视频 | а√资源新版在线天堂 | 亚洲大尺度无码无码专区 | 麻花豆传媒剧国产免费mv在线 | 2019午夜福利不卡片在线 | 久久精品国产大片免费观看 | 九九久久精品国产免费看小说 | 美女扒开屁股让男人桶 | 国产一精品一av一免费 | 性色av无码免费一区二区三区 | 国产av人人夜夜澡人人爽麻豆 | 一本大道伊人av久久综合 | 人人澡人人透人人爽 | 99国产精品白浆在线观看免费 | 奇米影视888欧美在线观看 | 国产亚洲人成在线播放 | 久久成人a毛片免费观看网站 | 性做久久久久久久免费看 | 色偷偷人人澡人人爽人人模 | 久久婷婷五月综合色国产香蕉 | 特黄特色大片免费播放器图片 | 亚洲精品久久久久avwww潮水 | 18黄暴禁片在线观看 | 国产口爆吞精在线视频 | 欧美丰满老熟妇xxxxx性 | 欧美熟妇另类久久久久久不卡 | 亚洲天堂2017无码中文 | 欧美放荡的少妇 | 国产欧美精品一区二区三区 | 欧美怡红院免费全部视频 | 曰韩少妇内射免费播放 | 丰满少妇人妻久久久久久 | 中文字幕人成乱码熟女app | 中文字幕乱码中文乱码51精品 | 亚洲精品久久久久久久久久久 | 一本久道久久综合狠狠爱 | 亚洲中文字幕无码一久久区 | 男女爱爱好爽视频免费看 | 丰满护士巨好爽好大乳 | 色欲av亚洲一区无码少妇 | 无遮挡国产高潮视频免费观看 | 麻豆国产97在线 | 欧洲 | 国产成人无码av片在线观看不卡 | 国产猛烈高潮尖叫视频免费 | 任你躁在线精品免费 | 精品偷拍一区二区三区在线看 | 鲁鲁鲁爽爽爽在线视频观看 | 伊人久久大香线焦av综合影院 | 久精品国产欧美亚洲色aⅴ大片 | 2020最新国产自产精品 | 夜精品a片一区二区三区无码白浆 | 免费国产成人高清在线观看网站 | 2019午夜福利不卡片在线 | 日韩亚洲欧美中文高清在线 | 婷婷丁香六月激情综合啪 | 中文字幕av日韩精品一区二区 | 色综合久久久无码中文字幕 | 少妇太爽了在线观看 | 成人影院yy111111在线观看 | 在线欧美精品一区二区三区 | 欧美三级a做爰在线观看 | 中文字幕无码av波多野吉衣 | 无码一区二区三区在线观看 | 少妇的肉体aa片免费 | 男女下面进入的视频免费午夜 | 未满小14洗澡无码视频网站 | 俺去俺来也www色官网 | 无套内谢的新婚少妇国语播放 | 亚洲 欧美 激情 小说 另类 | 欧美freesex黑人又粗又大 | 色综合久久久无码网中文 | 少妇高潮喷潮久久久影院 | 国产偷国产偷精品高清尤物 | 免费乱码人妻系列无码专区 | 中文字幕色婷婷在线视频 | 娇妻被黑人粗大高潮白浆 | 清纯唯美经典一区二区 | 97久久精品无码一区二区 | 国产亚洲精品久久久ai换 | 少女韩国电视剧在线观看完整 | 欧美猛少妇色xxxxx | 18无码粉嫩小泬无套在线观看 | 国产凸凹视频一区二区 | 一本无码人妻在中文字幕免费 | 亚洲日韩精品欧美一区二区 | 日本乱偷人妻中文字幕 | 天堂久久天堂av色综合 | 国产午夜亚洲精品不卡 | 欧美激情内射喷水高潮 | 蜜桃臀无码内射一区二区三区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 欧美老熟妇乱xxxxx | 欧美黑人巨大xxxxx | 亚洲日本一区二区三区在线 | 国产片av国语在线观看 | 欧美黑人性暴力猛交喷水 | 综合激情五月综合激情五月激情1 | 亚洲精品美女久久久久久久 | 中文字幕无码人妻少妇免费 | 综合人妻久久一区二区精品 | 成人精品一区二区三区中文字幕 | 日韩少妇白浆无码系列 | 国产又粗又硬又大爽黄老大爷视 | 国产在线精品一区二区高清不卡 | 亚洲午夜无码久久 | 国产内射爽爽大片视频社区在线 | 久久久久亚洲精品中文字幕 | 日欧一片内射va在线影院 | 久久久久久亚洲精品a片成人 | 天天av天天av天天透 | 牲欲强的熟妇农村老妇女 | 国产在线aaa片一区二区99 | 亚洲日韩精品欧美一区二区 | 国产精品高潮呻吟av久久4虎 | 中文字幕av无码一区二区三区电影 | 中文无码精品a∨在线观看不卡 | 99久久99久久免费精品蜜桃 | 澳门永久av免费网站 | 暴力强奷在线播放无码 | 亚洲 a v无 码免 费 成 人 a v | 久久久精品欧美一区二区免费 | 最近的中文字幕在线看视频 | 特黄特色大片免费播放器图片 | 国产成人久久精品流白浆 | 中文字幕人妻无码一夲道 | 国产人妻精品午夜福利免费 | 日本乱偷人妻中文字幕 | av无码久久久久不卡免费网站 | 国产一区二区三区四区五区加勒比 | 久久久精品456亚洲影院 | 国产精品a成v人在线播放 | 久久国语露脸国产精品电影 | 国产高清不卡无码视频 | 亚洲综合在线一区二区三区 | 人妻熟女一区 | 麻豆成人精品国产免费 | 国产精华av午夜在线观看 | 久久精品国产一区二区三区肥胖 | 18无码粉嫩小泬无套在线观看 | 亚洲色欲色欲欲www在线 | 无码av岛国片在线播放 | 久久久久久九九精品久 | 人妻中文无码久热丝袜 | 亚洲自偷自偷在线制服 | 成人无码精品一区二区三区 | 色诱久久久久综合网ywww | 无码人妻精品一区二区三区下载 | 成人av无码一区二区三区 | 强奷人妻日本中文字幕 | 欧美 亚洲 国产 另类 | 亚洲欧美综合区丁香五月小说 | 偷窥日本少妇撒尿chinese | 国产一区二区不卡老阿姨 | 亚洲热妇无码av在线播放 | 日本一本二本三区免费 | 99久久99久久免费精品蜜桃 | 亚洲国产欧美日韩精品一区二区三区 | 内射巨臀欧美在线视频 | 国产区女主播在线观看 | 欧美自拍另类欧美综合图片区 | 高中生自慰www网站 | 精品 日韩 国产 欧美 视频 | 97夜夜澡人人爽人人喊中国片 | 中文无码伦av中文字幕 | 国产区女主播在线观看 | 国产亚洲欧美在线专区 | 少妇性l交大片欧洲热妇乱xxx | 999久久久国产精品消防器材 | 国产综合色产在线精品 | 老头边吃奶边弄进去呻吟 | 在线а√天堂中文官网 | 67194成是人免费无码 | 日韩欧美群交p片內射中文 | 欧美猛少妇色xxxxx | 无套内谢老熟女 | 亲嘴扒胸摸屁股激烈网站 | 亚洲熟女一区二区三区 | 中文字幕人妻丝袜二区 | 国产在线aaa片一区二区99 | 国产精品久久久午夜夜伦鲁鲁 | 日韩成人一区二区三区在线观看 | 国产成人精品无码播放 | 我要看www免费看插插视频 | 性色欲情网站iwww九文堂 | 小sao货水好多真紧h无码视频 | 日本免费一区二区三区最新 | 97精品人妻一区二区三区香蕉 | 精品久久久无码人妻字幂 | 永久黄网站色视频免费直播 | 麻豆国产丝袜白领秘书在线观看 | 国产精品嫩草久久久久 | 丝袜 中出 制服 人妻 美腿 | 夫妻免费无码v看片 | 精品久久久无码人妻字幂 | 精品成人av一区二区三区 | 天天拍夜夜添久久精品 | 欧美性猛交xxxx富婆 | 日本欧美一区二区三区乱码 | 亚洲va欧美va天堂v国产综合 | 7777奇米四色成人眼影 | 国产成人久久精品流白浆 | 亚洲精品久久久久avwww潮水 | 亚洲一区二区三区香蕉 | 国产真实夫妇视频 | 久久久久av无码免费网 | 极品嫩模高潮叫床 | 国产亚洲精品精品国产亚洲综合 | 清纯唯美经典一区二区 | 日韩亚洲欧美精品综合 | 欧美zoozzooz性欧美 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲精品中文字幕乱码 | 亚洲国产精品无码一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 久久99精品国产麻豆蜜芽 | 精品国产国产综合精品 | 久久成人a毛片免费观看网站 | 无套内射视频囯产 | 国产精品二区一区二区aⅴ污介绍 | 欧美 丝袜 自拍 制服 另类 | 天堂а√在线地址中文在线 | 亚洲精品一区三区三区在线观看 | 亚洲人成网站色7799 | 在线观看国产午夜福利片 | 成人性做爰aaa片免费看不忠 | 欧美国产日产一区二区 | 无码av免费一区二区三区试看 | 精品国产国产综合精品 | 一本久道高清无码视频 | 久久久亚洲欧洲日产国码αv | 国产成人无码a区在线观看视频app | 久久人人爽人人爽人人片ⅴ | 一本精品99久久精品77 | 中文字幕无码视频专区 | 亚洲の无码国产の无码影院 | 成在人线av无码免费 | 国产超碰人人爽人人做人人添 | 日本一卡2卡3卡四卡精品网站 | 曰韩无码二三区中文字幕 | 成人欧美一区二区三区黑人免费 | 久久国产精品_国产精品 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久亚洲精品中文字幕无男同 | 日日噜噜噜噜夜夜爽亚洲精品 | 性欧美牲交xxxxx视频 | 亚洲一区二区三区国产精华液 | 丰满护士巨好爽好大乳 | 亚洲自偷精品视频自拍 | 波多野结衣一区二区三区av免费 | 狠狠色噜噜狠狠狠7777奇米 | 国产日产欧产精品精品app | 日日天干夜夜狠狠爱 | 午夜丰满少妇性开放视频 | 久久久久久av无码免费看大片 | 人妻少妇精品无码专区动漫 | 亚洲欧洲无卡二区视頻 | 中文字幕乱码中文乱码51精品 | 国产精品久久久久久久9999 | 少妇愉情理伦片bd | 撕开奶罩揉吮奶头视频 | 狂野欧美性猛交免费视频 | 丰满肥臀大屁股熟妇激情视频 | 日本一卡二卡不卡视频查询 | 国内丰满熟女出轨videos | 呦交小u女精品视频 | 人人澡人人妻人人爽人人蜜桃 | 欧洲精品码一区二区三区免费看 | 日本高清一区免费中文视频 | 男女下面进入的视频免费午夜 | 无遮无挡爽爽免费视频 | 人妻aⅴ无码一区二区三区 | 国产成人综合在线女婷五月99播放 | 中文字幕无码日韩欧毛 | 久久亚洲a片com人成 | 给我免费的视频在线观看 | 性色欲情网站iwww九文堂 | 未满小14洗澡无码视频网站 | 亚洲精品成人av在线 | 亚洲娇小与黑人巨大交 | 国产精品久久国产精品99 | 亚洲一区二区三区含羞草 | 少妇性l交大片欧洲热妇乱xxx | 东京一本一道一二三区 | 精品偷拍一区二区三区在线看 | 大肉大捧一进一出好爽视频 | 丰满少妇熟乱xxxxx视频 | 无码国内精品人妻少妇 | 玩弄少妇高潮ⅹxxxyw | 少妇被黑人到高潮喷出白浆 | 天堂亚洲2017在线观看 | 东京热无码av男人的天堂 | 亚洲中文字幕久久无码 | 真人与拘做受免费视频一 | 久久亚洲精品成人无码 | 精品熟女少妇av免费观看 | 欧美肥老太牲交大战 | 国产另类ts人妖一区二区 | 粉嫩少妇内射浓精videos | 女高中生第一次破苞av | 最近免费中文字幕中文高清百度 | 性色av无码免费一区二区三区 | 国产亚洲人成a在线v网站 | 精品无码国产一区二区三区av | 荡女精品导航 | 97久久精品无码一区二区 | 亚洲成av人片在线观看无码不卡 | 国产三级精品三级男人的天堂 | 日韩欧美成人免费观看 | 亚洲午夜无码久久 | 国产卡一卡二卡三 | 5858s亚洲色大成网站www | 亚洲成a人片在线观看无码3d | 亚洲中文字幕乱码av波多ji | 蜜桃臀无码内射一区二区三区 | 大地资源网第二页免费观看 | 国产无套粉嫩白浆在线 | 骚片av蜜桃精品一区 | www国产亚洲精品久久久日本 | 俄罗斯老熟妇色xxxx | 给我免费的视频在线观看 | 国产精品欧美成人 | 久久精品中文字幕一区 | 色老头在线一区二区三区 | 精品无码一区二区三区爱欲 | 中文字幕日韩精品一区二区三区 | 图片小说视频一区二区 | 99久久精品无码一区二区毛片 | 亚洲熟悉妇女xxx妇女av | 久久99国产综合精品 | 久久人人爽人人爽人人片ⅴ | 亚洲日韩乱码中文无码蜜桃臀网站 | 日韩成人一区二区三区在线观看 | 麻豆成人精品国产免费 | 日本熟妇乱子伦xxxx | 少妇人妻偷人精品无码视频 | 久久久久99精品成人片 | 国产69精品久久久久app下载 | 在线播放免费人成毛片乱码 | 国产无套粉嫩白浆在线 | 激情内射日本一区二区三区 | 俺去俺来也在线www色官网 | 中文字幕 人妻熟女 | 亚洲成色www久久网站 | 国产办公室秘书无码精品99 | 亚洲综合久久一区二区 | 思思久久99热只有频精品66 | 久久久久免费精品国产 | 性色av无码免费一区二区三区 | 国产一区二区三区影院 | 亚洲中文字幕在线观看 | 秋霞成人午夜鲁丝一区二区三区 | 国产精品怡红院永久免费 | 欧美怡红院免费全部视频 | 98国产精品综合一区二区三区 | 成人动漫在线观看 | 麻豆精品国产精华精华液好用吗 | 亚洲人成网站在线播放942 | 久久综合九色综合欧美狠狠 | 中文无码精品a∨在线观看不卡 | 日韩成人一区二区三区在线观看 | 少妇性l交大片欧洲热妇乱xxx | 欧美兽交xxxx×视频 | 中文字幕无码免费久久99 | 无码帝国www无码专区色综合 | 老司机亚洲精品影院 | 在线观看欧美一区二区三区 | 亚洲成av人片在线观看无码不卡 | 国产精品资源一区二区 | 人妻少妇被猛烈进入中文字幕 | 精品久久久无码中文字幕 | 丝袜足控一区二区三区 | 天堂久久天堂av色综合 | 97人妻精品一区二区三区 | 亚洲小说春色综合另类 | 成人无码视频在线观看网站 | 久久精品视频在线看15 | 中文字幕人妻无码一区二区三区 | 国产精品美女久久久久av爽李琼 | 色一情一乱一伦一区二区三欧美 | 性欧美牲交xxxxx视频 | 国产精品亚洲lv粉色 | 亚洲最大成人网站 | 无码国内精品人妻少妇 | 国产av剧情md精品麻豆 | 少妇性l交大片 | 国产电影无码午夜在线播放 | 99精品国产综合久久久久五月天 | 中国女人内谢69xxxxxa片 | 久热国产vs视频在线观看 | 日韩视频 中文字幕 视频一区 | 亚洲va欧美va天堂v国产综合 | 精品国偷自产在线视频 | 麻豆国产丝袜白领秘书在线观看 | 国产亚洲人成a在线v网站 | 欧美xxxx黑人又粗又长 | 成人免费视频视频在线观看 免费 | 天堂а√在线地址中文在线 | 日韩精品无码一区二区中文字幕 | 日韩av无码一区二区三区不卡 | 久久无码人妻影院 | 一本加勒比波多野结衣 | 亚洲va欧美va天堂v国产综合 | 亚洲日韩一区二区三区 | 无码人妻精品一区二区三区下载 | 日韩av无码中文无码电影 | 曰本女人与公拘交酡免费视频 | 色婷婷久久一区二区三区麻豆 | 激情亚洲一区国产精品 | 中文无码成人免费视频在线观看 | 国产日产欧产精品精品app | 亚洲国产成人av在线观看 | 在线а√天堂中文官网 | 日本一区二区更新不卡 | 成年女人永久免费看片 | 日本精品人妻无码免费大全 | 欧美第一黄网免费网站 | 久久久精品成人免费观看 | 欧美国产亚洲日韩在线二区 | 黑人粗大猛烈进出高潮视频 | 免费播放一区二区三区 | 国产特级毛片aaaaaaa高清 | 综合网日日天干夜夜久久 | 国产香蕉97碰碰久久人人 | 中文字幕乱码中文乱码51精品 | 久久久久99精品成人片 | 免费观看的无遮挡av | 国产成人亚洲综合无码 | 色 综合 欧美 亚洲 国产 | 蜜桃臀无码内射一区二区三区 | 午夜福利一区二区三区在线观看 | 亚洲精品一区二区三区在线观看 | 国产人妻人伦精品1国产丝袜 | 风流少妇按摩来高潮 | 国产无遮挡又黄又爽又色 | 欧美日韩一区二区三区自拍 | 欧美精品无码一区二区三区 | 亚洲欧美色中文字幕在线 | 荫蒂被男人添的好舒服爽免费视频 | 99精品无人区乱码1区2区3区 | 欧美成人午夜精品久久久 | 欧美熟妇另类久久久久久不卡 | 国产精品18久久久久久麻辣 | 亚洲国产精品成人久久蜜臀 | 国产成人精品优优av | 四虎影视成人永久免费观看视频 | 精品熟女少妇av免费观看 | 欧美三级不卡在线观看 | 久久亚洲中文字幕无码 | 久久熟妇人妻午夜寂寞影院 | 狠狠色丁香久久婷婷综合五月 | 免费无码av一区二区 | 国产色视频一区二区三区 | 久久久精品人妻久久影视 | 久久精品女人天堂av免费观看 | 国产成人综合在线女婷五月99播放 | 国产成人精品优优av | 亚洲一区二区三区无码久久 | 日韩精品乱码av一区二区 | 嫩b人妻精品一区二区三区 | 日韩精品无码免费一区二区三区 | 永久免费观看美女裸体的网站 | 国产成人一区二区三区别 | 好男人www社区 | 精品久久久中文字幕人妻 | 久久久久se色偷偷亚洲精品av | 国产精品人妻一区二区三区四 | 亚洲天堂2017无码中文 | 亚洲自偷自偷在线制服 | 国产成人人人97超碰超爽8 | 亚洲精品午夜无码电影网 | 国产肉丝袜在线观看 | 免费无码肉片在线观看 | 免费播放一区二区三区 | 精品国产一区av天美传媒 | 久久精品中文闷骚内射 | 日本护士xxxxhd少妇 | 欧美兽交xxxx×视频 | 亚洲一区av无码专区在线观看 | 性生交大片免费看女人按摩摩 | 无码一区二区三区在线 | 在线a亚洲视频播放在线观看 | 日韩av无码一区二区三区不卡 | 久久综合狠狠综合久久综合88 | 丰腴饱满的极品熟妇 | 人妻熟女一区 | 色噜噜亚洲男人的天堂 | 无套内谢的新婚少妇国语播放 | 精品国产一区av天美传媒 | 色诱久久久久综合网ywww | 亚洲精品一区二区三区四区五区 | 欧美人与动性行为视频 | 久久99精品国产.久久久久 | 麻豆果冻传媒2021精品传媒一区下载 | 大地资源中文第3页 | 人妻尝试又大又粗久久 | 国产乱人偷精品人妻a片 | 久久久久久国产精品无码下载 | 精品国产一区二区三区四区在线看 | 天天躁日日躁狠狠躁免费麻豆 | 久久99国产综合精品 | 国产xxx69麻豆国语对白 | 无套内谢老熟女 | 亚洲日本一区二区三区在线 | 波多野结衣av一区二区全免费观看 | 鲁一鲁av2019在线 | 97精品人妻一区二区三区香蕉 | 亚洲精品一区三区三区在线观看 | 欧美第一黄网免费网站 | 久久国内精品自在自线 | 久久99精品久久久久久动态图 | 亚洲日韩精品欧美一区二区 | 欧美日韩一区二区免费视频 | 天堂在线观看www | 男人和女人高潮免费网站 | 日韩人妻无码一区二区三区久久99 | 精品久久久中文字幕人妻 | 国产精品久久久久久久9999 | 久久人妻内射无码一区三区 | 国产精品久久久久久久9999 | 久久亚洲精品成人无码 | 久久综合九色综合欧美狠狠 | 牲交欧美兽交欧美 | av香港经典三级级 在线 | 婷婷六月久久综合丁香 | 国产精品自产拍在线观看 | 麻豆md0077饥渴少妇 | 天堂无码人妻精品一区二区三区 | 色综合久久久无码中文字幕 | 精品久久久久久亚洲精品 | 久久久久亚洲精品中文字幕 | 人人妻人人澡人人爽欧美精品 | 一本大道伊人av久久综合 | 亚洲熟妇色xxxxx欧美老妇 | a在线亚洲男人的天堂 | 青青久在线视频免费观看 | 国产成人无码a区在线观看视频app | 久久99热只有频精品8 | 国产午夜精品一区二区三区嫩草 | 国产精品久久精品三级 | 欧美人与牲动交xxxx | 国产凸凹视频一区二区 | 免费中文字幕日韩欧美 | 中文字幕无码乱人伦 | 国产色精品久久人妻 | 性欧美大战久久久久久久 | 色情久久久av熟女人妻网站 | 亚洲国产成人av在线观看 | 扒开双腿疯狂进出爽爽爽视频 | 爽爽影院免费观看 | 丰满人妻翻云覆雨呻吟视频 | 久久亚洲中文字幕无码 | 中文久久乱码一区二区 | 天下第一社区视频www日本 | 人人超人人超碰超国产 | 亚洲理论电影在线观看 | 久久精品人人做人人综合试看 | 内射老妇bbwx0c0ck | 中文字幕 亚洲精品 第1页 | 啦啦啦www在线观看免费视频 | 中文字幕无码免费久久99 | 伊在人天堂亚洲香蕉精品区 | 亚洲中文无码av永久不收费 | 亚洲无人区一区二区三区 | 一本久久a久久精品亚洲 | 久久综合网欧美色妞网 | v一区无码内射国产 | 中文字幕 亚洲精品 第1页 | 无码一区二区三区在线观看 | 国精品人妻无码一区二区三区蜜柚 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产香蕉尹人综合在线观看 | 精品国产精品久久一区免费式 | 亚洲精品国产精品乱码视色 | 无码人妻久久一区二区三区不卡 | 亚洲国产欧美在线成人 | 国产熟妇另类久久久久 | 一本久久伊人热热精品中文字幕 | 亚洲精品鲁一鲁一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 国产乱码精品一品二品 | 人人澡人摸人人添 | 国产亚洲欧美日韩亚洲中文色 | 日本精品高清一区二区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 午夜福利一区二区三区在线观看 | 色情久久久av熟女人妻网站 | 精品一区二区三区波多野结衣 | 国产精品资源一区二区 | 亚洲中文字幕va福利 | 无码人妻丰满熟妇区五十路百度 | 帮老师解开蕾丝奶罩吸乳网站 | 国产亚洲美女精品久久久2020 | 大乳丰满人妻中文字幕日本 | 色欲av亚洲一区无码少妇 | 亚洲综合伊人久久大杳蕉 | 性啪啪chinese东北女人 | 欧美国产日产一区二区 | 亚洲人成影院在线无码按摩店 | 成人欧美一区二区三区 | 中文字幕精品av一区二区五区 | 男女猛烈xx00免费视频试看 | 国内综合精品午夜久久资源 | 亚洲伊人久久精品影院 | 国产精品久久久久无码av色戒 | 精品午夜福利在线观看 | 永久免费观看国产裸体美女 | 玩弄少妇高潮ⅹxxxyw | 国产av剧情md精品麻豆 | 国产人妻人伦精品1国产丝袜 | 国产激情综合五月久久 | 内射欧美老妇wbb | 国产9 9在线 | 中文 | 熟妇人妻无码xxx视频 | 久久久精品国产sm最大网站 | 亚洲自偷自偷在线制服 | 国产精品国产自线拍免费软件 | 99在线 | 亚洲 | 日本乱人伦片中文三区 | 天天燥日日燥 | 在线观看国产午夜福利片 | 精品亚洲成av人在线观看 | 国产精品久免费的黄网站 | 丰满人妻被黑人猛烈进入 | 特级做a爰片毛片免费69 | 日韩亚洲欧美精品综合 | 天天躁夜夜躁狠狠是什么心态 | 丰满护士巨好爽好大乳 | 国产精品va在线播放 | 日韩亚洲欧美中文高清在线 | 未满小14洗澡无码视频网站 | 东京无码熟妇人妻av在线网址 | 六十路熟妇乱子伦 | 丝袜人妻一区二区三区 | 国产精品久久久久久久影院 | 婷婷丁香六月激情综合啪 | 在线播放无码字幕亚洲 | 俺去俺来也www色官网 | 无码人妻少妇伦在线电影 | 久久亚洲a片com人成 | 男女超爽视频免费播放 | 欧美老妇交乱视频在线观看 | 少妇的肉体aa片免费 | 国产精品无套呻吟在线 | 天干天干啦夜天干天2017 | 久久久久av无码免费网 | 国产真人无遮挡作爱免费视频 | 天堂亚洲免费视频 | 免费无码肉片在线观看 | 久久精品人人做人人综合试看 | 国产精品亚洲lv粉色 | 欧美丰满熟妇xxxx | 在线观看国产午夜福利片 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲日韩乱码中文无码蜜桃臀网站 | 日日躁夜夜躁狠狠躁 | 中文无码精品a∨在线观看不卡 | 男人的天堂2018无码 | 亚洲男女内射在线播放 | 国内揄拍国内精品少妇国语 | 少妇性荡欲午夜性开放视频剧场 | 亚洲一区二区三区香蕉 | 精品国产精品久久一区免费式 | 亚洲国精产品一二二线 | 日产精品99久久久久久 | 丝袜足控一区二区三区 | 十八禁真人啪啪免费网站 | 国精产品一品二品国精品69xx | 亚洲熟妇色xxxxx亚洲 | 377p欧洲日本亚洲大胆 | 国产亚洲精品久久久ai换 | 青青久在线视频免费观看 | 亚洲中文字幕va福利 | 国产成人无码av片在线观看不卡 | 丰满少妇弄高潮了www | 鲁一鲁av2019在线 | 丝袜美腿亚洲一区二区 | 99久久精品无码一区二区毛片 | 国产在线精品一区二区高清不卡 | 成人精品视频一区二区三区尤物 | 国产精品毛片一区二区 | 国产美女极度色诱视频www | 国产精品18久久久久久麻辣 | 男人和女人高潮免费网站 | 国产无遮挡又黄又爽又色 | 亚洲乱码中文字幕在线 | 婷婷综合久久中文字幕蜜桃三电影 | 狠狠色噜噜狠狠狠7777奇米 | 男女爱爱好爽视频免费看 | 亚洲人亚洲人成电影网站色 | 亚洲精品国产第一综合99久久 | 色一情一乱一伦一视频免费看 | 亚洲中文字幕在线观看 | 国产偷国产偷精品高清尤物 | 国产精品高潮呻吟av久久4虎 | 人妻无码久久精品人妻 | 亚洲国产午夜精品理论片 | 亚洲精品国偷拍自产在线观看蜜桃 | 又大又紧又粉嫩18p少妇 | 精品aⅴ一区二区三区 | 人妻熟女一区 | 亚洲精品国产精品乱码不卡 | 在线亚洲高清揄拍自拍一品区 | 东京热无码av男人的天堂 | 国产亚洲精品久久久久久久久动漫 | 欧美 丝袜 自拍 制服 另类 | 色婷婷欧美在线播放内射 | 99久久精品无码一区二区毛片 | 免费无码肉片在线观看 | 欧美黑人性暴力猛交喷水 | 国产乱子伦视频在线播放 | 狠狠噜狠狠狠狠丁香五月 | 日本丰满护士爆乳xxxx | 亚洲人成影院在线观看 | 亚洲乱亚洲乱妇50p | 国产亚洲精品久久久久久国模美 | 亚洲伊人久久精品影院 | 久久无码中文字幕免费影院蜜桃 | 亚洲国产成人a精品不卡在线 | 国产成人无码av片在线观看不卡 | 一本久道高清无码视频 | 亚洲国产欧美在线成人 | 香蕉久久久久久av成人 | 久9re热视频这里只有精品 | 国产网红无码精品视频 | 国产亚洲精品久久久久久 | 青青久在线视频免费观看 | 男女猛烈xx00免费视频试看 | 亚洲经典千人经典日产 | 色婷婷久久一区二区三区麻豆 | 无码国内精品人妻少妇 | 全球成人中文在线 | 久久国产自偷自偷免费一区调 | 中文字幕av日韩精品一区二区 | 国产性生交xxxxx无码 | 人妻夜夜爽天天爽三区 | 久久精品国产大片免费观看 | 任你躁国产自任一区二区三区 | 亚洲无人区一区二区三区 | 狂野欧美性猛交免费视频 | 欧美丰满少妇xxxx性 | 国产av一区二区精品久久凹凸 | 精品无码av一区二区三区 | 男女下面进入的视频免费午夜 | 性色av无码免费一区二区三区 | 清纯唯美经典一区二区 | 亚洲国产欧美日韩精品一区二区三区 | 色婷婷香蕉在线一区二区 | 欧美老人巨大xxxx做受 | 亚洲无人区午夜福利码高清完整版 | 日本精品少妇一区二区三区 | 草草网站影院白丝内射 | 宝宝好涨水快流出来免费视频 | 无码人妻精品一区二区三区下载 | 国产高潮视频在线观看 | 乱码午夜-极国产极内射 | 精品国产一区二区三区四区在线看 | 99视频精品全部免费免费观看 | 久久亚洲日韩精品一区二区三区 | 国产免费久久久久久无码 | 欧美性生交活xxxxxdddd | 国产另类ts人妖一区二区 | 综合人妻久久一区二区精品 | 日韩精品乱码av一区二区 | 性色欲情网站iwww九文堂 | 亲嘴扒胸摸屁股激烈网站 | 色综合久久88色综合天天 | 亚洲成av人影院在线观看 | 欧美丰满老熟妇xxxxx性 | 成在人线av无码免观看麻豆 | 夜夜影院未满十八勿进 | 国产人妻精品一区二区三区不卡 | 亚洲欧美日韩成人高清在线一区 | 欧美性黑人极品hd | 97久久超碰中文字幕 | 两性色午夜视频免费播放 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产一区二区三区精品视频 | 秋霞成人午夜鲁丝一区二区三区 | 东京热男人av天堂 | a国产一区二区免费入口 | 免费国产成人高清在线观看网站 | 日韩精品一区二区av在线 | 2020久久超碰国产精品最新 | 亚洲一区av无码专区在线观看 | 欧美zoozzooz性欧美 | 久久99精品国产.久久久久 | 水蜜桃亚洲一二三四在线 | 精品aⅴ一区二区三区 | 少妇厨房愉情理9仑片视频 | 精品一二三区久久aaa片 | 亚洲午夜久久久影院 | 国产性生大片免费观看性 | 丰满岳乱妇在线观看中字无码 | 亚洲娇小与黑人巨大交 | 中文字幕无码视频专区 | 在线精品亚洲一区二区 | 国内少妇偷人精品视频免费 | 亚洲人成无码网www | 久久99精品久久久久婷婷 | 亚洲综合精品香蕉久久网 | 女人高潮内射99精品 | av香港经典三级级 在线 | 婷婷六月久久综合丁香 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 草草网站影院白丝内射 | 99久久精品日本一区二区免费 | 中文字幕人妻无码一夲道 | 国产成人综合色在线观看网站 | 色综合久久88色综合天天 | 偷窥村妇洗澡毛毛多 | 狠狠色欧美亚洲狠狠色www | 麻豆精品国产精华精华液好用吗 | 又紧又大又爽精品一区二区 | 国产艳妇av在线观看果冻传媒 | 国产免费久久久久久无码 | 午夜精品一区二区三区在线观看 | 熟妇人妻激情偷爽文 | 日日摸天天摸爽爽狠狠97 | 精品国产国产综合精品 | 亚洲国精产品一二二线 | 亚洲成av人综合在线观看 | 亚洲国产精品一区二区美利坚 | 欧美精品无码一区二区三区 | 一本无码人妻在中文字幕免费 | 国产av人人夜夜澡人人爽麻豆 | 亚洲成色在线综合网站 | 在线播放免费人成毛片乱码 | 最近中文2019字幕第二页 | 久久99精品久久久久久动态图 | 国产午夜精品一区二区三区嫩草 | 国产绳艺sm调教室论坛 | 国产精品久久国产三级国 | av香港经典三级级 在线 | 亚洲成色www久久网站 | 青青久在线视频免费观看 | 无套内谢的新婚少妇国语播放 | 国产精品99久久精品爆乳 | 国产 浪潮av性色四虎 | 一二三四社区在线中文视频 | 麻豆md0077饥渴少妇 | 国产精品多人p群无码 | 内射巨臀欧美在线视频 | 成人影院yy111111在线观看 | 无码人妻久久一区二区三区不卡 | 亚洲爆乳精品无码一区二区三区 | 国产免费无码一区二区视频 | 国产一精品一av一免费 | 扒开双腿吃奶呻吟做受视频 | 图片小说视频一区二区 | 少妇无码一区二区二三区 | 国产无套内射久久久国产 | 亚洲国产精品久久久久久 | 一区二区三区高清视频一 | 中文字幕乱码人妻无码久久 | 色综合久久久无码中文字幕 | 精品久久久久久人妻无码中文字幕 | 亚洲精品成a人在线观看 | 国产做国产爱免费视频 | 无码乱肉视频免费大全合集 | 日本一卡2卡3卡四卡精品网站 | 少妇无码一区二区二三区 | 中国女人内谢69xxxx | 日韩精品无码免费一区二区三区 | 久久久久久久女国产乱让韩 | 久青草影院在线观看国产 | 欧美人与牲动交xxxx | 中文字幕乱码人妻无码久久 | 国产乱人伦av在线无码 | 少妇邻居内射在线 | 激情爆乳一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 377p欧洲日本亚洲大胆 | 亚洲乱亚洲乱妇50p | 久久久久久久久888 | 国内综合精品午夜久久资源 | 国产精品久久久久久久影院 | 日本在线高清不卡免费播放 | 亚洲国产欧美在线成人 | 亚洲精品久久久久久一区二区 | 精品国产av色一区二区深夜久久 | 荫蒂添的好舒服视频囗交 | 国产两女互慰高潮视频在线观看 | 欧美亚洲国产一区二区三区 | 少妇无码吹潮 | 夜夜影院未满十八勿进 | 国产农村乱对白刺激视频 | 少妇激情av一区二区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 又粗又大又硬毛片免费看 | 国产极品视觉盛宴 | 欧美激情综合亚洲一二区 | 国产手机在线αⅴ片无码观看 | 久精品国产欧美亚洲色aⅴ大片 | 少女韩国电视剧在线观看完整 | 国产精品久久久久久无码 | 国产亚洲精品久久久久久久 | 中文字幕+乱码+中文字幕一区 | 少妇无码av无码专区在线观看 | 亚洲欧洲无卡二区视頻 | 性欧美大战久久久久久久 | 日产国产精品亚洲系列 | 性色欲情网站iwww九文堂 | 国产精品成人av在线观看 | 国产午夜福利100集发布 | 丰满人妻一区二区三区免费视频 | 久久久精品欧美一区二区免费 | 无码纯肉视频在线观看 | 国产三级久久久精品麻豆三级 | 熟女俱乐部五十路六十路av | 中文无码成人免费视频在线观看 | 午夜丰满少妇性开放视频 | 蜜桃视频插满18在线观看 | 露脸叫床粗话东北少妇 | 国产欧美熟妇另类久久久 | 丰满人妻精品国产99aⅴ | 人妻少妇精品无码专区动漫 | 亚洲人亚洲人成电影网站色 | 精品一区二区三区无码免费视频 | 成人亚洲精品久久久久 | 又大又黄又粗又爽的免费视频 | 日本护士xxxxhd少妇 | 欧美性生交xxxxx久久久 | 亚洲熟妇色xxxxx欧美老妇 | 国产麻豆精品精东影业av网站 | 高清无码午夜福利视频 | 国产无遮挡又黄又爽又色 | 国产精品久久久久久亚洲影视内衣 | 我要看www免费看插插视频 | 久久精品中文字幕大胸 | 国产午夜无码精品免费看 | 漂亮人妻洗澡被公强 日日躁 | 成人动漫在线观看 | 午夜福利不卡在线视频 | 国产 精品 自在自线 | 狂野欧美性猛xxxx乱大交 | 欧美日本日韩 | 亚洲色欲色欲天天天www | 国产精品人人妻人人爽 | 久久久精品国产sm最大网站 | 好男人社区资源 | 成人影院yy111111在线观看 | 国产成人精品一区二区在线小狼 | 97久久超碰中文字幕 | 熟妇女人妻丰满少妇中文字幕 | 老司机亚洲精品影院 | 日韩精品无码一区二区中文字幕 | 特黄特色大片免费播放器图片 | 久久久久99精品成人片 | 欧美日本日韩 | 欧美日韩精品 | 亚洲国产成人a精品不卡在线 | 国产成人无码a区在线观看视频app | 人妻少妇精品无码专区二区 | 97资源共享在线视频 | 四虎国产精品免费久久 | 欧美成人家庭影院 | 男女性色大片免费网站 | 黑人巨大精品欧美一区二区 | 久久久精品成人免费观看 | 国产精品a成v人在线播放 | 99久久精品日本一区二区免费 | 亚洲一区二区三区国产精华液 | 国产国产精品人在线视 | 无码精品国产va在线观看dvd | 日韩欧美成人免费观看 | 国产午夜无码视频在线观看 | 亚洲国产日韩a在线播放 | 四虎国产精品一区二区 | 亚洲中文字幕久久无码 | 露脸叫床粗话东北少妇 | 欧美三级不卡在线观看 | 亚洲成a人片在线观看无码3d | av在线亚洲欧洲日产一区二区 | 国产精品久久国产三级国 | 一本久道高清无码视频 | 精品国产乱码久久久久乱码 | 中文字幕无码热在线视频 | 国产亚洲精品久久久久久 | 女人被男人爽到呻吟的视频 | 黑人大群体交免费视频 | 免费观看激色视频网站 | 亚洲色在线无码国产精品不卡 | 国産精品久久久久久久 | 亚洲精品久久久久久久久久久 | 丝袜 中出 制服 人妻 美腿 | 在线播放无码字幕亚洲 | 精品水蜜桃久久久久久久 | 精品亚洲韩国一区二区三区 | 色一情一乱一伦一视频免费看 | 国产亚洲人成a在线v网站 | 国产在线精品一区二区高清不卡 | 黑人巨大精品欧美一区二区 | 欧美日本精品一区二区三区 | 亚洲大尺度无码无码专区 | 久久精品国产日本波多野结衣 | 日韩av无码一区二区三区 | 男人扒开女人内裤强吻桶进去 | 久久精品人妻少妇一区二区三区 | 亚洲欧美综合区丁香五月小说 | 国产精品亚洲lv粉色 | 日韩精品一区二区av在线 | 国产sm调教视频在线观看 | 精品成人av一区二区三区 | 又黄又爽又色的视频 | 免费乱码人妻系列无码专区 | 女人被爽到呻吟gif动态图视看 | 亚洲一区二区三区在线观看网站 | 国产无遮挡吃胸膜奶免费看 | 中文亚洲成a人片在线观看 | 亚洲熟熟妇xxxx | 亚洲熟悉妇女xxx妇女av | 国产精品久久久久久久9999 | 中文亚洲成a人片在线观看 | 岛国片人妻三上悠亚 | 久久99久久99精品中文字幕 | 少妇愉情理伦片bd | 无码av免费一区二区三区试看 | 国内揄拍国内精品少妇国语 | 99久久人妻精品免费二区 | 亚洲国产欧美国产综合一区 | 久久久精品国产sm最大网站 | 日韩av无码一区二区三区 | 少妇性l交大片欧洲热妇乱xxx | 亚洲日韩中文字幕在线播放 | 国产人妻精品午夜福利免费 | 99riav国产精品视频 | 少妇一晚三次一区二区三区 | 天天躁日日躁狠狠躁免费麻豆 | 国产精品欧美成人 | 久久国内精品自在自线 | 国产精品久久久久久亚洲影视内衣 | 少妇人妻av毛片在线看 | 99久久精品午夜一区二区 | 捆绑白丝粉色jk震动捧喷白浆 | 夜精品a片一区二区三区无码白浆 | 亚拍精品一区二区三区探花 | 国产午夜亚洲精品不卡下载 | 久久国内精品自在自线 | 久久 国产 尿 小便 嘘嘘 | 中文字幕人成乱码熟女app | 一本久道久久综合狠狠爱 | 九九在线中文字幕无码 | 4hu四虎永久在线观看 | 亚洲精品午夜无码电影网 | 欧美自拍另类欧美综合图片区 | 露脸叫床粗话东北少妇 | 国产成人一区二区三区在线观看 | 午夜性刺激在线视频免费 | 国产亚av手机在线观看 | 国产深夜福利视频在线 | 国产一区二区三区日韩精品 | 久久亚洲中文字幕无码 | 国产精品理论片在线观看 | 丝袜 中出 制服 人妻 美腿 | 日日摸夜夜摸狠狠摸婷婷 | 成人亚洲精品久久久久 | 国产精品第一区揄拍无码 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产xxx69麻豆国语对白 | 亚洲综合在线一区二区三区 | 99久久久无码国产精品免费 | 欧美性猛交xxxx富婆 | 国产熟妇另类久久久久 | 丰满少妇女裸体bbw | 夜夜夜高潮夜夜爽夜夜爰爰 | 东京热男人av天堂 | 亚洲毛片av日韩av无码 | 久久久精品人妻久久影视 | 国产精品毛片一区二区 | 久久久久久久久蜜桃 | 欧美刺激性大交 | 国产真实乱对白精彩久久 | 精品国产一区av天美传媒 | 丰满少妇熟乱xxxxx视频 | 国产热a欧美热a在线视频 | 国产高潮视频在线观看 | 免费无码一区二区三区蜜桃大 | 台湾无码一区二区 | 精品无码一区二区三区爱欲 | 黑人玩弄人妻中文在线 | 久久久久久av无码免费看大片 | 中文无码伦av中文字幕 | 欧美放荡的少妇 | 377p欧洲日本亚洲大胆 | 亚洲精品国偷拍自产在线麻豆 | 国产乱子伦视频在线播放 | 丰满岳乱妇在线观看中字无码 | 国产成人午夜福利在线播放 | 无码帝国www无码专区色综合 |