青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 19,  comments - 21,  trackbacks - 0
一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:
    1). 并行設備的硬件寄存器(如:狀態(tài)寄存器)
    2). 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)
    3). 多線程應用中被幾個任務共享的變量
    回答不出這個問題的人是不會被雇傭的。我認為這是區(qū)分C程序員和嵌入式系統(tǒng)程序員的最基本的問題。嵌入式系統(tǒng)程序員經常同硬件、中斷、RTOS等等打交道,所用這些都要求volatile變量。不懂得volatile內容將會帶來災難。
    假設被面試者正確地回答了這是問題(嗯,懷疑這否會是這樣),我將稍微深究一下,看一下這家伙是不是直正懂得volatile完全的重要性。
    1). 一個參數既可以是const還可以是volatile嗎?解釋為什么。
    2). 一個指針可以是volatile 嗎?解釋為什么。
    3). 下面的函數有什么錯誤:
         int square(volatile int *ptr)
         {
              return *ptr * *ptr;
         }
    下面是答案:
    1). 是的。一個例子是只讀的狀態(tài)寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它。
    2). 是的。盡管這并不很常見。一個例子是當一個中服務子程序修該一個指向一個buffer的指針時。
    3). 這段代碼的有個惡作劇。這段代碼的目的是用來返指針*ptr指向值的平方,但是,由于*ptr指向一個volatile型參數,編譯器將產生類似下面的代碼:
    int square(volatile int *ptr)  
    {
         int a,b;
         a = *ptr;
         b = *ptr;
         return a * b;
     }
    由于*ptr的值可能被意想不到地該變,因此a和b可能是不同的。結果,這段代碼可能返不是你所期望的平方值!正確的代碼如下:
     long square(volatile int *ptr)  
     {
            int a;
            a = *ptr;
            return a * a;
     }

講講我的理解: (歡迎打板子...~~!)

關鍵在于兩個地方:      
  
1. 編譯器的優(yōu)化  (請高手幫我看看下面的理解)

在本次線程內, 當讀取一個變量時,為提高存取速度,編譯器優(yōu)化時有時會先把變量讀取到一個寄存器中;以后,再取變量值時,就直接從寄存器中取值;

當變量值在本線程里改變時,會同時把變量的新值copy到該寄存器中,以便保持一致

當變量在因別的線程等而改變了值,該寄存器的值不會相應改變,從而造成應用程序讀取的值和實際的變量值不一致

當該寄存器在因別的線程等而改變了值,原變量的值不會改變,從而造成應用程序讀取的值和實際的變量值不一致  


舉一個不太準確的例子:  

發(fā)薪資時,會計每次都把員工叫來登記他們的銀行卡號;一次會計為了省事,沒有即時登記,用了以前登記的銀行卡號;剛好一個員工的銀行卡丟了,已掛失該銀行卡號;從而造成該員工領不到工資  

員工 -- 原始變量地址  
銀行卡號 -- 原始變量在寄存器的備份  


2. 在什么情況下會出現(如1樓所說)

    1). 并行設備的硬件寄存器(如:狀態(tài)寄存器)  
    2). 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)  
    3). 多線程應用中被幾個任務共享的變量  
    

補充: volatile應該解釋為“直接存取原始內存地址”比較合適,“易變的”這種解釋簡直有點誤導人;  

“易變”是因為外在因素引起的,象多線程,中斷等,并不是因為用volatile修飾了的變量就是“易變”了,假如沒有外因,即使用volatile定義,它也不會變化;

而用volatile定義之后,其實這個變量就不會因外因而變化了,可以放心使用了; 大家看看前面那種解釋(易變的)是不是在誤導人


------------簡明示例如下:-----------------

volatile關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng)、硬件或者其它線程等。遇到這個關鍵字聲明的變量,編譯器對訪問該變量的代碼就不再進行優(yōu)化,從而可以提供對特殊地址的穩(wěn)定訪問。
使用該關鍵字的例子如下:
int volatile nVint;
>>>>當要求使用volatile 聲明的變量的值的時候,系統(tǒng)總是重新從它所在的內存讀取數據,即使它前面的指令剛剛從該處讀取過數據。而且讀取的數據立刻被保存。
例如:
volatile int i=10;
int a = i;
...
//其他代碼,并未明確告訴編譯器,對i進行過操作
int b = i;
>>>>volatile 指出 i是隨時可能發(fā)生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的匯編代碼會重新從i的地址讀取數據放在b中。而優(yōu)化做法是,由于編譯器發(fā)現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作,它會自動把上次讀的數據放在b中。而不是重新從i里面讀。這樣以來,如果i是一個寄存器變量或者表示一個端口數據就容易出錯,所以說volatile可以保證對特殊地址的穩(wěn)定訪問。
>>>>注意,在vc6中,一般調試模式沒有進行代碼優(yōu)化,所以這個關鍵字的作用看不出來。下面通過插入匯編代碼,測試有無volatile關鍵字,對程序最終代碼的影響:
>>>>首先,用classwizard建一個win32 console工程,插入一個voltest.cpp文件,輸入下面的代碼:
>>
#i nclude <stdio.h>
void main()
{
int i=10;
int a = i;
printf("i= %d",a);
//下面匯編語句的作用就是改變內存中i的值,但是又不讓編譯器知道
__asm {
mov dword ptr [ebp-4], 20h
}
int b = i;
printf("i= %d",b);
}      
然后,在調試版本模式運行程序,輸出結果如下:
i = 10
i = 32
然后,在release版本模式運行程序,輸出結果如下:
i = 10
i = 10
輸出的結果明顯表明,release模式下,編譯器對代碼進行了優(yōu)化,第二次沒有輸出正確的i值。下面,我們把 i的聲明加上volatile關鍵字,看看有什么變化:
#i nclude <stdio.h>
void main()
{
volatile int i=10;
int a = i;
printf("i= %d",a);
__asm {
mov dword ptr [ebp-4], 20h
}
int b = i;
printf("i= %d",b);
}      
分別在調試版本和release版本運行程序,輸出都是:
i = 10
i = 32
這說明這個關鍵字發(fā)揮了它的作用!

-----------------------------------


volatile對應的變量可能在你的程序本身不知道的情況下發(fā)生改變
比如多線程的程序,共同訪問的內存當中,多個程序都可以操縱這個變量
你自己的程序,是無法判定合適這個變量會發(fā)生變化
還比如,他和一個外部設備的某個狀態(tài)對應,當外部設備發(fā)生操作的時候,通過驅動程序和中斷事件,系統(tǒng)改變了這個變量的數值,而你的程序并不知道。
對于volatile類型的變量,系統(tǒng)每次用到他的時候都是直接從對應的內存當中提取,而不會利用cache當中的原有數值,以適應它的未知何時會發(fā)生的變化,系統(tǒng)對這種變量的處理不會做優(yōu)化——顯然也是因為它的數值隨時都可能變化的情況。

--------------------------------------------------------------------------------

典型的例子
for ( int i=0; i<100000; i++);
這個語句用來測試空循環(huán)的速度的
但是編譯器肯定要把它優(yōu)化掉,根本就不執(zhí)行
如果你寫成  
for ( volatile int i=0; i<100000; i++);
它就會執(zhí)行了

volatile的本意是“易變的”  
由于訪問寄存器的速度要快過RAM,所以編譯器一般都會作減少存取外部RAM的優(yōu)化。比如:

static int i=0;

int main(void)
{
...
while (1)
{
if (i) dosomething();
}
}

/* Interrupt service routine. */
void ISR_2(void)
{
i=1;
}

程序的本意是希望ISR_2中斷產生時,在main當中調用dosomething函數,但是,由于編譯器判斷在main函數里面沒有修改過i,因此
可能只執(zhí)行一次對從i到某寄存器的讀操作,然后每次if判斷都只使用這個寄存器里面的“i副本”,導致dosomething永遠也不會被
調用。如果將將變量加上volatile修飾,則編譯器保證對此變量的讀寫操作都不會被優(yōu)化(肯定執(zhí)行)。此例中i也應該如此說明。

一般說來,volatile用在如下的幾個地方:

1、中斷服務程序中修改的供其它程序檢測的變量需要加volatile;

2、多任務環(huán)境下各任務間共享的標志應該加volatile;

3、存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;

另外,以上這幾種情況經常還要同時考慮數據的完整性(相互關聯的幾個標志讀了一半被打斷了重寫),在1中可以通過關中斷來實
現,2中可以禁止任務調度,3中則只能依靠硬件的良好設計了。
posted @ 2008-07-27 21:56 halCode 閱讀(339) | 評論 (0)編輯 收藏
???諸位,咱當電子工程師也是十余年了,不算有出息,環(huán)顧四周,也沒有看見幾個有出息的!回顧工程師生涯,感慨萬千,愿意講幾句掏心窩子的話,也算給咱們師弟師妹們提個醒,希望他們比咱們強!
?
[1]好好規(guī)劃自己的路,不要跟著感覺走!根據個人的理想決策安排,絕大部分人并不指望成為什么院士或教授,而是希望活得滋潤一些,爽一些。那么,就需要慎重安排自己的軌跡。從哪個行業(yè)入手,逐漸對該行業(yè)深入了解,不要頻繁跳槽,特別是不要為了一點工資而轉移陣地,從長遠看,這點錢根本不算什么,當你對一個行業(yè)有那么幾年的體會,以后錢根本不是問題。頻繁地動蕩不是上策,最后你對哪個行業(yè)都沒有摸透,永遠是新手!
?
[2]可以做技術,切不可沉湎于技術。千萬不可一門心思鉆研技術!給自己很大壓力,如果你的心思全部放在這上面,那么注定你將成為孔乙己一類的人物!適可而止為之,因為技術只不過是你今后前途的支柱之一,而且還不是最大的支柱。
?
[3]不要去做技術高手,只去做綜合素質高手!在企業(yè)里混,我們時常瞧不起某人,說他“什么都不懂,憑啥拿那么多錢,憑啥升官!”這是普遍的典型的工程師的迂腐之言。8051很牛嗎?人家能上去必然有他的本事,而且是你沒有的本事。你想想,老板搞經營那么多年,難道見識不如你這個新兵?人家或許善于管理,善于領會老板意圖,善于部門協(xié)調等等。因此務必培養(yǎng)自己多方面的能力,包括管理,親和力,察言觀色能力,攻關能力等,要成為綜合素質的高手,則前途無量,否則只能躲在角落看示波器!技術以外的技能才是更重要的本事!!從古到今,美國日本,一律如此!
?
[4]多交社會三教九流的朋友!不要只和工程師交往,認為有共同語言,其實更重要的是和其他類人物交往,如果你希望有朝一日當老板或高層管理,那么你整日面對的就是這些人。了解他們的經歷,思維習慣,愛好,學習他們處理問題的模式,了解社會各個角落的現象和問題,這是以后發(fā)展的巨大的本錢。
?
[6]抓住時機向技術管理或市場銷售方面的轉變!要想有前途就不能一直搞開發(fā),適當時候要轉變?yōu)楣芾砘蜾N售,前途會更大,以前搞技術也沒有白搞,以后還用得著。搞管理可以培養(yǎng)自己的領導能力,搞銷售可以培養(yǎng)自己的市場概念和思維,同時為自己以后發(fā)展積累龐大的人脈!應該說這才是前途的真正支柱!
?
[7]逐漸克服自己的心里弱點和性格缺陷!多疑,敏感,天真(貶義,并不可愛),猶豫不決,膽怯,多慮,臉皮太薄,心不夠黑,教條式思維。。。這些工程師普遍存在的性格弱點必須改變!很難嗎?只在床上想一想當然不可能,去幫朋友守一個月地攤,包準有效果,去實踐,而不要只想!不克服這些缺點,一切不可能,甚至連項目經理都當不好--盡管你可能技術不錯!
?
[8]工作的同時要為以后做準備!建立自己的工作環(huán)境!及早為自己配置一個工作環(huán)境,裝備電腦,示波器(可以買個二手的),仿真器,編程器等,業(yè)余可以接點活,一方面接觸市場,培養(yǎng)市場感覺,同時也積累資金,更重要的是準備自己的產品,咱搞技術的沒有錢,只有技術,技術的代表不是學歷和證書,而是產品,拿出象樣的產品,就可技術轉讓或與人合作搞企業(yè)!先把東西準備好,等待機會,否則,有了機會也抓不住!
?
[9]要學會善于推銷自己!不僅要能干,還要能說,能寫,善于利用一切機會推銷自己,樹立自己的品牌形象,很必要!要創(chuàng)造條件讓別人了解自己,不然老板怎么知道你能干?外面的投資人怎么相信你?提早把自己推銷出去,機會自然會來找你!搞個個人主頁是個好注意!!特別是培養(yǎng)自己在行業(yè)的名氣,有了名氣,高薪機會自不在話下,更重要的是有合作的機會......

[10]該出手時便出手!永遠不可能有100%把握!!!條件差不多就要大膽去干,去闖出自己的事業(yè),不要猶豫,不要彷徨,干了不一定成功,但至少為下一次沖擊積累了經驗,不干永遠沒出息,而且要干成必然要經歷失敗。不經歷風雨,怎么見彩虹,沒有人能隨隨便便成功!
posted @ 2006-04-11 10:51 halCode 閱讀(549) | 評論 (2)編輯 收藏

借用別人的流程圖提醒自己編程的步驟


1.面向連接的套接字的系統(tǒng)調用時序圖



無連接協(xié)議的套接字調用時序圖

面向連接的應用程序流程圖



posted @ 2006-03-23 21:11 halCode 閱讀(6367) | 評論 (0)編輯 收藏
大學生=吃飯+睡覺+談戀愛
豬=吃飯+睡覺
所以:大學生=豬+談戀愛
以上推出 大學生-談戀愛=豬
即 大學生不談戀愛的都是豬?
同理得出 豬只要談戀愛就可以變成大學生
posted @ 2006-03-21 10:34 halCode 閱讀(401) | 評論 (0)編輯 收藏

李安獲最佳導演獎“首先要感謝很多在場和不在場的人,像制作人Ann Li,編劇Diana,Jack~~我覺得《斷背山》是屬于我李安一個人的,如果被其他人拍了,我將會很生氣!這部電影既不是關于同性戀,女人,愛情,而是愛的本身。
謝謝大家的支持,謝謝我的妻子和兒子,我愛你們,我將永遠和你們同在。雖然在期間我的父親不幸過世,但是要感謝我家中的媽媽,還有中國臺灣,香港和內地的同胞們。最后,謝謝大家的關心!”

看到這段話時,我十分感動,尤其是“但是要感謝我家中的媽媽,還有中國臺灣,香港和內地的同胞們。”體現了一種難得的親情,而且在拿到國際電影上最高榮譽的獎項時,不忘記自己是名中國人,不忘記把臺灣說成“中國臺灣”。

然而我注意到這句話的表述有點怪怪的,是不是他自己的原話呢?我最不愿意懷疑的就是“中國臺灣”幾個字。于是我查看了sohu這段新聞下網友的評論,發(fā)現原文是這樣的:“And finally, to my mother and family, and everybody in Taiwan, Hong Kong and China. Thank you. ”,他說的是“臺灣、香港和中國”。。。。。

盡管他是所有華人的驕傲,盡管也許他并沒有太在意他的表述,但是。。我多少還是有些失望的。。。。

posted @ 2006-03-06 19:59 halCode 閱讀(704) | 評論 (0)編輯 收藏
昨天寫了MoveWindow函數,今天又要寫SetWindowPos函數,因為MoveWindow確實不好,浪費了差不多一天時間。。。對于主窗口,選擇了Center屬性就可以移動位置,不選就不行;窗口資源過大也不能移動;改變后窗口的尺寸大于等于屏幕尺寸的話,在它上面DoModal出來的新窗口不能移動。。原來,使用MoveWindow移動對話框位置似乎有很苛刻的條件,一不小心就原地不動了,而且我也實在琢磨不透這樣的條件,網上也沒有查處來。今天用了SetWindowPos后,才發(fā)現,果然好用!

BOOL SetWindowPos(
   
const CWnd* pWndInsertAfter,
   
int x,
   
int y,
   
int cx,
   
int cy,
   UINT nFlags 
);

Parameters

pWndInsertAfter
Identifies the CWnd object that will precede this CWnd object in the Z-order. This parameter can be a pointer to a CWnd or a Pointer to one of the following values:
  • wndBottom   Places the window at the bottom of the Z-order. If this CWnd is a topmost window, the window loses its topmost status; the system places the window at the bottom of all other windows.
  • wndTop   Places the window at the top of the Z-order.
  • wndTopMost   Places the window above all nontopmost windows. The window maintains its topmost position even when it is deactivated.
  • wndNoTopMost   Repositions the window to the top of all nontopmost windows (that is, behind all topmost windows). This flag has no effect if the window is already a nontopmost window.
nFlags
Specifies sizing and positioning options. This parameter can be a combination of the following: 常用的是SWP_SHOWWINDOW

注意:
    這里的坐標參數用的是Client坐標,對于子窗口用的是其父窗口的坐標系。然而對于用DoModal()彈出的窗口,如果在資源屬性里沒有選擇Child屬性的話,它的父窗口是DeskTop,而不是調用DoModal()的窗口。

posted @ 2006-03-01 17:30 halCode 閱讀(2738) | 評論 (0)編輯 收藏

剛做的那個軟件界面很重要,就象是把自己做的一個個控件網上畫一樣,還要按照實際運行效果來不斷調整位置,很麻煩。當時使用MoveWindow()這個函數來控制對話框的大小和位置,不了解參數情況,在網上查了,記得好象放在這里備忘,那時還覺得blog真是方便。結果現在又要用起這個函數卻又找不到了!不知道是不是放在這個blog里了。看來blog多了還不方便了。不過不要誤會,那些都是以前找到這個blog之前暫時用的,都不太滿意。最后覺得還是這里好,hoho,方便。暈,我來寫這篇日志是干嗎的?這么扯到這么遠了。。。不說了,還是把MoveWindow()再貼一下吧。。

BOOL MoveWindow
(   HWND hWnd,      
//Handle to the window
    int X,                      //Specifies the new position of the left side of the window.
    int Y,                      //Specifies the new position of the top of the window.
    int nWidth,
    
int nHeight,
    BOOL bRepaint
);

這個是 API函數,如果在MFC中使用CWnd::MoveWindow則不需要第一個參數句柄hWnd,其他相同。
posted @ 2006-02-28 15:44 halCode 閱讀(2913) | 評論 (0)編輯 收藏
成功的人要具備:有肚量去容忍那些不能改變的事,有勇氣去改變那些可能改變的事,有智慧去區(qū)別上述兩類事。
posted @ 2005-12-29 14:17 halCode 閱讀(338) | 評論 (0)編輯 收藏
有些東西在你沒有遇到之前還真是不知道自己沒有弄清楚,也許是我平時細節(jié)的地方注意少了,看來以后要多加注意了。

char *pStr;
char ch;
char str[] = "Hello";

ch 
= str[1];
*pStr = str[1];

printf(
"ch = %c\n", ch);
printf(
"*pStr = %c"*pStr);

此時打印ch值的時候能正確輸出,但是打印pStr[0]的時候就出問題了,跟蹤發(fā)現是pStr[0] = str[1];這句出現問題。

原來,char *pStr; 只定義了一個4字節(jié)的指針變量,而這個變量里面的內容是將要指向一個char類型變量的,但是此時pStr只是個“野指針”,并沒有指向一個char類型的內存單元,所以,當用*pStr來訪問這個元素時,系統(tǒng)根本不知道該訪問何處的空間,因此,在使用pStr前,必須讓它指向一個具體的空間。

由上面可以將相關語句改為
char *pStr;
char ch;
char str[] = "Hello";

pStr 
= &ch;    //pStr指向ch、獲得初始化
pStr = &str[1];  //pStr指向str[1]地址、獲得初始化
ch = str[1];
*pStr = str[1];

printf(
"ch = %c\n", ch);
printf(
"*pStr = %c"*pStr);
也就是說,要先給指針一個地址值初始化它,然后才能用*訪問它指向的內容。



◎另外,在子函數中使用malloc()/new()分配的內存空間不會因子函數的返回而消失,函數只會清理調子函數里定義的變量的空間,如:
char* func()
{
  
char *p;
  p 
= (char *)malloc(sizeof(char));
  
  
return p;
}
  //返回后,p所在空間被釋放,但是p所指空間還存在
所以,可以用p1=func();來獲得在func()中分配的空間。

此中方法可以用來解決“指針的指針”使用不方便的問題。步驟分2步:1、把傳入的指針的指針參數去掉;2、把函數的返回值賦給要改變的對象的指針:
void GetMemory2(char **p, int num)
{
  
*= (char *)malloc(sizeof(char* num);
}

void Test2(void)
{
  
char *str = NULL;
  GetMemory2(
&str, 100);   // 注意參數是 &str,而不是str
  strcpy(str, "hello");    
  cout
<< str << endl;
  free(str);    
}


//////下面是用傳遞動態(tài)內存的方法實現
char *GetMemory3(int num)
{
  
char *= (char *)malloc(sizeof(char* num);
  
return p;
}

void Test3(void)
{
  
char *str = NULL;
  str 
= GetMemory3(100);    
  strcpy(str, 
"hello");
  cout
<< str << endl;
  free(str);    
}

因為此時用malloc/new分配的內存空間是堆里面的,函數返回時不會回收;而如果在子函數中用char p[]="asdfgewq";則p是在棧中定義的(先分配p的空間,然后講字符串拷貝進去,跟char *p="asdfasdf"分配在全局靜態(tài)內存中不一樣),所以會被系統(tǒng)收回。
posted @ 2005-12-21 10:55 halCode 閱讀(582) | 評論 (0)編輯 收藏
1。定義數組變量時必須指定數組元素個數,因為系統(tǒng)會根據元素個數在編譯時一次性分配這么多內存;
      而指針變量只需要指定類型,系統(tǒng)只為該指針變量分配4字節(jié)(32位機)內存,而不會為該變量所指內容分配內存。

2。指針變量是有存儲空間的;而數組名僅僅是一個標號,沒有實際存儲空間,單單一個數組名就只能表示該數組的第1個元素的地址。int a[10]; 規(guī)定&a就等于&a[0]或者a .

3。例如 char str[]= "hello world"和char *p = "hello world"中,數組str是先分配給他元素個數個內存,然后將后面的字符串復制給這個空間(注意,此時應該考慮\0字符);而p的建立過程是先在靜態(tài)存儲區(qū)建立常字符串"hello world\0",然后將p指向這個常字符串。所以數組str中元素的內容可以通過重新賦值改變,而p指向的內容不能改變。
posted @ 2005-12-18 21:40 halCode 閱讀(586) | 評論 (0)編輯 收藏
僅列出標題  下一頁

<2005年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

相冊

編程資源

不務正業(yè)

找工作

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲淫片在线视频| 99国产精品久久久久久久| 亚洲综合999| 亚洲永久免费| 韩国成人福利片在线播放| 免费日韩av电影| 欧美日韩mv| 欧美一级欧美一级在线播放| 欧美在线视频一区二区| 亚洲国产高清aⅴ视频| 亚洲欧洲综合另类| 国产精品r级在线| 久久婷婷激情| 欧美激情1区2区| 欧美一区二区成人| 蜜月aⅴ免费一区二区三区| 日韩视频一区二区在线观看| 亚洲一级免费视频| 亚洲国产精品高清久久久| 一区二区三区www| 国内久久视频| 亚洲乱亚洲高清| 好吊日精品视频| 99xxxx成人网| 亚洲高清av| 亚洲一级在线观看| 亚洲人永久免费| 午夜宅男久久久| 99国产一区| 久久综合色8888| 亚洲欧美日韩在线综合| 理论片一区二区在线| 性色av一区二区三区| 欧美久久久久久久| 女女同性精品视频| 国产欧美精品在线| 99精品国产高清一区二区| 一色屋精品视频在线观看网站| 亚洲视频精品| 老牛国产精品一区的观看方式| 久久福利视频导航| 欧美日韩伦理在线免费| 欧美黄色aa电影| 国内一区二区三区| 亚洲欧美日韩综合aⅴ视频| 日韩一区二区免费高清| 久久综合九色综合欧美狠狠| 久久精品国内一区二区三区| 国产精品毛片| 在线视频欧美日韩| 一本一道久久综合狠狠老精东影业| 久久久午夜精品| 久久riav二区三区| 国产美女扒开尿口久久久| 中文亚洲欧美| 亚洲男人的天堂在线观看| 欧美日韩国产精品自在自线| 欧美国产一区在线| 亚洲精品国产品国语在线app| 久久伊人亚洲| 欧美成人自拍| 亚洲国产专区| 欧美福利视频| 亚洲精品日韩一| 亚洲小说春色综合另类电影| 欧美日韩精品中文字幕| 日韩亚洲欧美精品| 亚洲综合久久久久| 国产精品日韩一区| 午夜久久久久久| 另类国产ts人妖高潮视频| 激情欧美亚洲| 欧美.www| 一本色道**综合亚洲精品蜜桃冫| 亚洲视频欧洲视频| 国产精品毛片a∨一区二区三区| 亚洲欧美日韩精品一区二区| 久久久久久高潮国产精品视| 在线免费观看一区二区三区| 女仆av观看一区| 99国产精品视频免费观看| 午夜精品久久久久久久久久久| 国产日韩欧美在线观看| 久久先锋资源| 日韩午夜高潮| 久久久久久久久久看片| 亚洲国产精品女人久久久| 欧美日韩国产影片| 午夜视频在线观看一区二区| 免费国产一区二区| 亚洲午夜精品| 激情久久影院| 欧美日韩亚洲高清| 久久狠狠婷婷| 日韩视频在线一区二区| 欧美在线观看视频| 亚洲美女精品久久| 国产日韩欧美精品在线| 欧美成人精品| 午夜欧美大片免费观看| 亚洲高清一区二| 久久国产一二区| aaa亚洲精品一二三区| 国产一区二区在线观看免费| 欧美精品日韩www.p站| 午夜精品久久久久久| 亚洲国内自拍| 久久亚洲春色中文字幕| 亚洲免费影院| 日韩视频在线一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 久久婷婷国产综合精品青草 | 亚洲国产高清视频| 欧美一区二区三区四区在线观看| 亚洲三级免费观看| 激情久久久久久| 国产精品日韩专区| 欧美日韩国产成人| 欧美阿v一级看视频| 久久国产精品久久w女人spa| 中国女人久久久| 亚洲黄页视频免费观看| 麻豆精品一区二区综合av| 午夜亚洲伦理| 亚洲欧美国产精品va在线观看| 亚洲欧洲日韩综合二区| 影音先锋中文字幕一区| 国产日韩欧美一区二区| 国产精品永久免费视频| 国产精品福利久久久| 欧美日韩免费观看一区| 欧美日韩1区2区| 欧美高清在线观看| 免费久久99精品国产| 久久资源在线| 免费看黄裸体一级大秀欧美| 久久久激情视频| 久久国产精品久久久久久电车| 欧美亚洲在线播放| 欧美中文字幕第一页| 欧美一区日韩一区| 欧美一区久久| 久久亚洲欧洲| 美女啪啪无遮挡免费久久网站| 久久一区二区视频| 久久午夜精品| 欧美日本乱大交xxxxx| 欧美日韩国产在线看| 欧美视频在线观看视频极品| 国产精品免费观看在线| 国产亚洲一区二区在线观看| 激情欧美一区二区| 亚洲人成网站在线播| 一本大道久久精品懂色aⅴ| 亚洲免费人成在线视频观看| 亚洲欧美中文在线视频| 先锋影音久久| 蜜桃av综合| 亚洲精品国产无天堂网2021| 亚洲天堂久久| 久久国产精品色婷婷| 欧美福利一区| 国产精品视频内| 在线成人性视频| 亚洲天堂网在线观看| 久久久精品一区二区三区| 亚洲国产va精品久久久不卡综合| 亚洲精品美女| 欧美一区免费视频| 欧美极品一区| 国产一区在线免费观看| 日韩视频精品| 久久婷婷影院| 一区二区久久久久久| 久久视频在线视频| 国产精品久久久久久影视| 精品动漫3d一区二区三区| 一区二区三区四区在线| 久久一本综合频道| 日韩亚洲欧美中文三级| 久久精品午夜| 国产精品对白刺激久久久| 亚洲国产日韩在线| 欧美一级网站| 亚洲美女av在线播放| 久久精品国产一区二区三区免费看 | 男女激情视频一区| 一区二区三欧美| 奶水喷射视频一区| 国产日韩免费| 亚洲欧美成人一区二区在线电影 | 亚洲激情第一页| 久久国产精品72免费观看| 欧美日韩一区二区三区| 亚洲成人在线网| 久久精品视频免费播放| 一区二区三区 在线观看视频| 嫩草影视亚洲| 亚洲电影在线免费观看| 久久久免费av|