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

用 Span 對 C# 進程中三大內(nèi)存區(qū)域進行統(tǒng)一訪問 ,太厲害了!

存儲 存儲軟件 后端
總的來說,這一篇主要是從思想上帶大家一起認識 Span,以及如何用 Span 對接 三大區(qū)域內(nèi)存,關(guān)于 Span 的好處以及源碼解析。

[[348727]]

 一:背景

1. 講故事

前段時間寫了幾篇 C# 漫文,評論留言中有很多朋友多次提到 Span,周末抽空看了下,確實是一個非常的新結(jié)構(gòu),讓我想到了當年的WCF,它統(tǒng)一了.NET下各種零散的分布式技術(shù),包括:.NET Remoteing,WebService,NamedPipe,MSMQ,而這里的 Span 統(tǒng)一了 C# 進程中的三大塊內(nèi)存訪問,包括:棧內(nèi)存, 托管堆內(nèi)存, 非托管堆內(nèi)存,畫個圖如下:

 

接下來就和大家具體聊聊這三大塊的內(nèi)存統(tǒng)一訪問。

二:進程中的三大塊內(nèi)存解析

1. 棧內(nèi)存

大家應(yīng)該知道方法內(nèi)的局部變量是存放在棧上的,而且每一個線程默認會被分配 1M 的內(nèi)存空間,我舉個例子:

  1. static void Main(string[] args) 
  2.         { 
  3.             int i = 10; 
  4.             long j = 20; 
  5.             List<string> list = new List<string>(); 
  6.         } 

上面 i,j 的值都是存于棧上,list的堆上內(nèi)存地址也是存于棧上,為了看個究竟,可以用 windbg 驗證一下:

  1. 0:000> !clrstack -l 
  2. OS Thread Id: 0x2708 (0) 
  3.         Child SP               IP Call Site 
  4. 00000072E47CE558 00007ff89cf7c184 [InlinedCallFrame: 00000072e47ce558] Interop+Kernel32.ReadFile(IntPtr, Byte*, Int32, Int32 ByRef, IntPtr) 
  5. 00000072E47CE558 00007ff7c7c03fd8 [InlinedCallFrame: 00000072e47ce558] Interop+Kernel32.ReadFile(IntPtr, Byte*, Int32, Int32 ByRef, IntPtr) 
  6. 00000072E47CE520 00007FF7C7C03FD8 ILStubClass.IL_STUB_PInvoke(IntPtr, Byte*, Int32, Int32 ByRef, IntPtr) 
  7. 00000072E47CE7B0 00007FF8541E530D System.Console.ReadLine() 
  8. 00000072E47CE7E0 00007FF7C7C0101E DataStruct.Program.Main(System.String[]) [E:\net5\ConsoleApp2\ConsoleApp1\Program.cs @ 22] 
  9.     LOCALS: 
  10.         0x00000072E47CE82C = 0x000000000000000a 
  11.         0x00000072E47CE820 = 0x0000000000000014 
  12.         0x00000072E47CE818 = 0x0000018015aeab10 

通過 clrstack -l 查看線程棧,最后三行可以明顯的看到 0a -> 10, 14 -> 20 , 0xxxxxxb10 => list堆地址,除了這些簡單類型,還可以在棧上分配復(fù)雜類型,這里就要用到 stackalloc 關(guān)鍵詞, 如下代碼:

  1. int* ptr = stackalloc int[3] { 10, 11, 12 }; 

問題就在這里,指針類型雖然靈活,但是做任何事情都比較繁瑣,比如說:

  • 查找某一個數(shù)是否在 int[] 中
  • 反轉(zhuǎn) int[]
  • 剔除尾部的某一個數(shù)字(比如 12)

就拿第一個問題來說,操作指針的代碼如下:

  1. //指針接收 
  2.             int* ptr = stackalloc int[3] { 10, 11, 12 }; 
  3.  
  4.             //包含判斷 
  5.             for (int i = 0; i < 3; i++) 
  6.             { 
  7.                 if (*ptr++ == 11) 
  8.                 { 
  9.                     Console.WriteLine(" 11 存在 數(shù)組中"); 
  10.                 } 
  11.             } 

 

后面的兩個問題就更加復(fù)雜了,既然 Span 是統(tǒng)一訪問,就應(yīng)該用 Span 來接 stackalloc,代碼如下:

  1. Span<int> span = stackalloc int[3] { 10, 11, 12 }; 
  2.  
  3.             //1. 是否包含 
  4.             var hasNum = span.Contains(11); 
  5.  
  6.             //2. 反轉(zhuǎn) 
  7.             span.Reverse(); 
  8.  
  9.             //3. 剔除尾部 
  10.             span.Trim(12); 

這就很了,你既不需要接觸指針,又能完成指針的大部分操作,而且還特別便捷,佩服,最后來驗證一下 int[] 是否真的在 線程棧 上。

  1. 0:000> !clrstack -l 
  2. 000000ED7737E4B0 00007FF7C4EA16AD DataStruct.Program.Main(System.String[]) [E:\net5\ConsoleApp2\ConsoleApp1\Program.cs @ 28] 
  3.     LOCALS: 
  4.         0x000000ED7737E570 = 0x000000ed7737e4d0 
  5.         0x000000ED7737E56C = 0x0000000000000001 
  6.         0x000000ED7737E558 = 0x000000ed7737e4d0 
  7.  
  8. 0:000> dp 0x000000ed7737e4d0 
  9. 000000ed`7737e4d0  0000000b`0000000c 00000000`0000000a 

從 Locals 處的 0x000000ED7737E570 = 0x000000ed7737e4d0 可以看到 key / value 是非常相近的,說明在棧上無疑。

從最后一行 a,b,c 可看出對應(yīng)的就是數(shù)組中的 10,11,12。

2. 非托管堆內(nèi)存

說到非托管內(nèi)存,讓我想起了當年 C# 調(diào)用 C++ 的場景,代碼到處充斥著類似下面的語句:

  1. private bool SendMessage(int messageType, string ip, string port, int length, byte[] messageBytes) 
  2.         { 
  3.             bool result = false
  4.             if (windowHandle != 0) 
  5.             { 
  6.                 var bytes = new byte[Const.MaxLengthOfBuffer]; 
  7.                 Array.Copy(messageBytes, bytes, messageBytes.Length); 
  8.  
  9.                 int sizeOfType = Marshal.SizeOf(typeof(StClientData)); 
  10.  
  11.                 StClientData stData = new StClientData 
  12.                 { 
  13.                     Ip = GlobalConvert.IpAddressToUInt32(IPAddress.Parse(ip)), 
  14.                     Port = Convert.ToInt16(port), 
  15.                     Length = Convert.ToUInt32(length), 
  16.                     Buffer = bytes 
  17.                 }; 
  18.  
  19.  
  20.                 int sizeOfStData = Marshal.SizeOf(stData); 
  21.  
  22.                 IntPtr pointer = Marshal.AllocHGlobal(sizeOfStData); 
  23.  
  24.                 Marshal.StructureToPtr(stData, pointer, true); 
  25.  
  26.                 CopyData copyData = new CopyData 
  27.                 { 
  28.                     DwData = (IntPtr)messageType, 
  29.                     CbData = Marshal.SizeOf(sizeOfType), 
  30.                     LpData = pointer 
  31.                 }; 
  32.  
  33.                 SendMessage(windowHandle, WmCopydata, 0, ref copyData); 
  34.  
  35.                 Marshal.FreeHGlobal(pointer); 
  36.  
  37.                 string data = GlobalConvert.ByteArrayToHexString(messageBytes); 
  38.                 CommunicationManager.Instance.SendDebugInfo(new DataSendEventArgs() { Data = data }); 
  39.  
  40.                 result = true
  41.             } 
  42.             return result; 
  43.         } 

上面代碼中的: IntPtr pointer = Marshal.AllocHGlobal(sizeOfStData); 和 Marshal.FreeHGlobal(pointer) 就用到了非托管內(nèi)存,從現(xiàn)在開始你就可以用 Span 來接 Marshal.AllocHGlobal 分配的非托管內(nèi)存啦!,如下代碼所示:

  1. class Program 
  2.     { 
  3.         static unsafe void Main(string[] args) 
  4.         { 
  5.             var ptr = Marshal.AllocHGlobal(3); 
  6.  
  7.             //將 ptr 轉(zhuǎn)換為 span 
  8.             var span = new Span<byte>((byte*)ptr, 3) { [0] = 10, [1] = 11, [2] = 12 }; 
  9.  
  10.             //然后在  span 中可以進行各種操作了。。。 
  11.  
  12.             Marshal.FreeHGlobal(ptr); 
  13.         } 
  14.     } 

這里我也用 windbg 給大家看一下 未托管內(nèi)存 在內(nèi)存中是個什么樣子。

  1. 0:000> !clrstack -l 
  2. OS Thread Id: 0x3b10 (0) 
  3.         Child SP               IP Call Site 
  4. 000000A51777E758 00007ff89cf7c184 [InlinedCallFrame: 000000a51777e758] Interop+Kernel32.ReadFile(IntPtr, Byte*, Int32, Int32 ByRef, IntPtr) 
  5. 000000A51777E758 00007ff7c4654dd8 [InlinedCallFrame: 000000a51777e758] Interop+Kernel32.ReadFile(IntPtr, Byte*, Int32, Int32 ByRef, IntPtr) 
  6. 000000A51777E720 00007FF7C4654DD8 ILStubClass.IL_STUB_PInvoke(IntPtr, Byte*, Int32, Int32 ByRef, IntPtr) 
  7. 000000A51777E9E0 00007FF7C46511D0 DataStruct.Program.Main(System.String[]) [E:\net5\ConsoleApp2\ConsoleApp1\Program.cs @ 26] 
  8.     LOCALS: 
  9.         0x000000A51777EA58 = 0x0000027490144760 
  10.         0x000000A51777EA48 = 0x0000027490144760 
  11.         0x000000A51777EA38 = 0x0000027490144760 
  12.  
  13. 0:000> dp 0x0000027490144760 
  14. 00000274`90144760  abababab`ab0c0b0a abababab`abababab         

最后一行的 0c0b0a 這就是低位到高位的 10,11,12 三個數(shù),接下來從 Locals 處 0x000000A51777EA58 = 0x0000027490144760 可以看出,這個key,value 相隔十萬八千里,說明肯定不在棧內(nèi)存中,繼續(xù)用 windbg 鑒別一下 0x0000027490144760 是否是托管堆上,可以用 !eeheap -gc 查看托管堆地址范圍,如下代碼:

  1. 0:000> !eeheap -gc 
  2. Number of GC Heaps: 1 
  3. generation 0 starts at 0x00000274901B1030 
  4. generation 1 starts at 0x00000274901B1018 
  5. generation 2 starts at 0x00000274901B1000 
  6. ephemeral segment allocation context: none 
  7.          segment             begin         allocated              size 
  8. 00000274901B0000  00000274901B1000  00000274901C5370  0x14370(82800) 
  9. Large object heap starts at 0x00000274A01B1000 
  10.          segment             begin         allocated              size 
  11. 00000274A01B0000  00000274A01B1000  00000274A01B5480  0x4480(17536) 
  12. Total Size:              Size: 0x187f0 (100336) bytes. 
  13. ------------------------------ 
  14. GC Heap Size:    Size: 0x187f0 (100336) bytes. 

從上面信息可以看到,0x0000027490144760 明顯不在:3代堆:00000274901B1000 ~ 00000274901C5370 和 大對象堆:00000274A01B1000 ~ 00000274A01B5480 區(qū)間范圍內(nèi)。

3. 托管堆內(nèi)存

用 Span 統(tǒng)一托管內(nèi)存訪問那是相當簡單了,如下代碼所示:

Span span = new byte[3] { 10, 11, 12 };

同樣,你有了Span,你就可以使用 Span 自帶的各種方法,這里就不多介紹了,大家有興趣可以實操一下。

三:總結(jié)

總的來說,這一篇主要是從思想上帶大家一起認識 Span,以及如何用 Span 對接 三大區(qū)域內(nèi)存,關(guān)于 Span 的好處以及源碼解析,后面上專門的文章吧!

本文轉(zhuǎn)載自微信公眾號「 一線碼農(nóng)聊技術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系 一線碼農(nóng)聊技術(shù)公眾號。

 

 

責(zé)任編輯:武曉燕 來源: 一線碼農(nóng)聊技術(shù)
相關(guān)推薦

2021-11-01 07:50:44

TomcatWeb應(yīng)用

2022-06-06 07:52:00

Python大風(fēng)車

2021-10-08 13:38:23

手機系統(tǒng)鴻蒙

2023-03-03 09:11:55

軟件開發(fā)NASA

2022-04-08 08:11:28

Python代碼

2018-04-11 14:30:33

2017-02-23 08:00:04

智能語音Click

2021-03-01 12:06:12

Nginx命令Linux

2018-05-14 22:58:14

戴爾

2025-01-09 11:10:15

2011-04-13 16:50:54

CC++內(nèi)存

2011-06-21 11:16:24

cc++

2023-05-06 06:47:46

Bing聊天機器人

2023-09-08 09:12:57

內(nèi)存緩存圖像

2019-02-12 11:07:49

2024-02-26 12:42:40

2023-11-01 08:07:42

.NETC#

2021-12-27 07:59:50

ECMAScript JSON模塊Node.js
點贊
收藏

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

天天操天天爱天天干| 久久久久成人精品免费播放动漫| 国产精品亚洲一区| 东方av正在进入| 北条麻妃一区二区三区在线| 午夜精品福利在线| 久久久福利视频| 一本久道久久综合无码中文| 韩日视频一区| 国产一区二区三区丝袜| 中文字幕色网站| 9999热视频在线观看| 久久久久国产免费免费| 91香蕉嫩草影院入口| 欧美日韩精品区| 91综合久久| 精品无人区乱码1区2区3区在线| 色婷婷综合网站| а√在线中文在线新版| 国产精品成人一区二区艾草 | 精品写真视频在线观看| 欧美大片免费看| 国产肥白大熟妇bbbb视频| 日本精品视频| 欧美日韩dvd在线观看| 男女视频网站在线观看| 顶级网黄在线播放| 亚洲国产电影在线观看| 国产精品亚洲一区| 精品人妻一区二区三区含羞草 | 婷婷久久综合| 亚洲免费电影在线观看| 美女伦理水蜜桃4| av成人在线网站| 在线观看av一区二区| 亚洲中文字幕无码专区| 久久国产精品黑丝| 亚洲欧美另类小说| 亚洲蜜桃在线| 成人在线免费电影| 久久久亚洲精品一区二区三区 | 性做久久久久久免费观看| 91制片厂免费观看| 又爽又大又黄a级毛片在线视频| 91小视频免费看| 国产精品免费看一区二区三区| 国产精品一区二区黑人巨大 | 色天天综合色天天久久| 自拍日韩亚洲一区在线| 精灵使的剑舞无删减版在线观看| 亚洲三级在线播放| 精品日韩在线播放| 黄色片网站在线观看| 国产精品无码永久免费888| 蜜桃999成人看片在线观看| 黄频网站在线观看| 成人网在线播放| 成人免费观看网站| 人妻va精品va欧美va| 成人美女视频在线看| 国产美女99p| 无码精品视频一区二区三区| aaa国产一区| 久久国产日韩欧美| 国际av在线| 亚洲国产精品成人久久综合一区| 日韩欧美三级一区二区| av片在线看| 国产精品理论片在线观看| 一区二区成人国产精品 | 综合干狼人综合首页| 亚洲欧美日韩综合| 国产成人在线网址| 综合激情一区| 久久久久久久色| 精品欧美一区二区三区免费观看| 免费在线日韩av| 国产精品欧美日韩久久| 免费的毛片视频| 久久国内精品视频| 成人3d动漫一区二区三区91| 天天av天天翘| 国产欧美视频一区二区三区| 制服诱惑一区| gogo久久| 欧美色综合久久| 欧美一级片在线免费观看| 美国成人xxx| 色婷婷av一区二区三区在线观看| 久久久久久免费观看| 久久天堂成人| 国产精品尤物福利片在线观看| 99热这里是精品| 99re视频这里只有精品| 亚洲高清视频一区| 黄色美女视频在线观看| 91久久一区二区| 三上悠亚在线一区| 欧亚精品一区| 日韩小视频网址| 中文字幕日韩一级| 麻豆国产精品视频| 精品福利影视| 国产原创在线观看| 色婷婷狠狠综合| 欧美一区二区三区影院| 久草在线成人| 欧美激情视频一区二区三区不卡| 无码人妻熟妇av又粗又大| 国产成人在线电影| 亚洲精品影院| 自拍视频在线看| 欧美va亚洲va国产综合| 国产精品久久免费观看| 99精品福利视频| 成人有码在线播放| 九一在线视频| 亚洲第一在线综合网站| 午夜一区二区视频| 国产免费久久| 2018日韩中文字幕| 亚洲国产精彩视频| 亚洲人成在线播放网站岛国| 好男人www社区| 日韩精品免费一区二区三区竹菊| 欧美成人免费全部观看天天性色| a片在线免费观看| 久久综合资源网| 国产手机免费视频| 日韩成人视屏| 欧美xxxx18性欧美| 在线免费观看高清视频| 国产日本欧洲亚洲| 久久精品香蕉视频| 亚洲97av| 2018日韩中文字幕| 亚州精品国产精品乱码不99按摩| 亚洲午夜久久久久久久久久久| 青青草久久伊人| 日韩精品永久网址| 国产成人亚洲精品| 国产永久av在线| 在线观看网站黄不卡| 日本激情小视频| 久久性色av| 欧美日韩一区二区三区免费| 原纱央莉成人av片| 亚洲精品一区二区三区不| 免费观看成人毛片| 久久综合av免费| 成人三级视频在线播放| 久操精品在线| 国产精品免费一区| 永久av在线| 欧美欧美午夜aⅴ在线观看| 中文国语毛片高清视频| 国内精品写真在线观看| 97精品国产97久久久久久粉红| 国产日韩中文在线中文字幕| 欧美成人手机在线| 欧美熟妇另类久久久久久不卡| 午夜av电影一区| 亚洲第一香蕉网| 日韩1区2区3区| 中文字幕99| 亚洲日本视频在线| 韩剧1988在线观看免费完整版| 手机看片1024日韩| 91国偷自产一区二区使用方法| 91资源在线播放| 国产一区福利在线| 欧美精品卡一卡二| 亚洲宅男一区| 国产中文欧美精品| 欧美草逼视频| 亚洲欧美在线x视频| 中文字幕在线日亚洲9| 亚洲免费视频中文字幕| 完美搭档在线观看| 日韩激情中文字幕| 日韩video| 久久超级碰碰| 国产精品一区二区性色av| 一区二区三区伦理| 国产视频精品va久久久久久| 亚洲天堂avav| 亚洲午夜精品网| 一级黄色片网址| 成人性色生活片| 啊啊啊国产视频| 亚洲承认在线| 亚洲欧美精品在线观看| 澳门成人av| 91精品久久久久久久久久入口| 牛牛精品视频在线| 亚洲午夜精品久久久久久性色| 国产人妻精品一区二区三区| 五月天中文字幕一区二区| 黄色免费一级视频| 99精品视频免费在线观看| 成年网站免费在线观看| 国产视频久久| 大片在线观看网站免费收看| 久久91麻豆精品一区| 官网99热精品| 小说区图片区亚洲| 欧美自拍视频在线观看| 性欧美1819sex性高清大胸| 亚洲人成电影网| 国精品人妻无码一区二区三区喝尿| 欧美亚洲日本国产| 1级黄色大片儿| 亚洲激情一二三区| 奇米网一区二区| 久久久99精品久久| 国产成人精品无码片区在线| 国内久久精品视频| 天天爽人人爽夜夜爽| 亚洲欧美久久| 日本丰满少妇xxxx| 午夜日韩在线| 国产精品亚洲天堂| 成人午夜av| 欧美亚洲免费高清在线观看| 超碰一区二区三区| 99九九视频| 电影91久久久| 国产欧美久久久久久| 浪潮色综合久久天堂| 欧美性一区二区三区| 波多野结衣精品| 欧美国产中文字幕| 色呦呦久久久| 欧美成人午夜激情视频| 免费网站免费进入在线| 国产一区二区三区高清在线观看| 欧洲伦理片一区 二区 三区| 亚洲国产精品va| 天堂av手机版| 亚洲国产三级网| 无码国产色欲xxxx视频| 亚洲精品理论电影| 凸凹人妻人人澡人人添| 亚洲第一中文字幕在线观看| 成人免费一级视频| 欧美mv和日韩mv国产网站| 亚洲av无码一区二区三区dv| 日韩一区二区三区高清免费看看| www.日韩高清| 欧美大片日本大片免费观看| 亚洲第一页在线观看| 精品国产乱码久久| 天堂在线观看免费视频| 亚洲国产天堂网精品网站| 天天操天天射天天舔| 亚洲激情在线观看视频免费| 日本午夜在线视频| 亚洲视频第一页| 亚洲1卡2卡3卡4卡乱码精品| 精品国产视频在线| 日韩专区av| 69久久夜色精品国产7777| 亚洲优女在线| 国产精品福利在线观看| 男人亚洲天堂| 99se婷婷在线视频观看| 亲子伦视频一区二区三区| 欧美国产一二三区| 欧美h版在线| 99在线观看视频免费| 一区二区精品| 亚洲少妇第一页| 国产精品自拍网站| 亚洲天堂美女视频| 国产午夜精品一区二区三区视频| 久久精品色妇熟妇丰满人妻| 亚洲欧美日韩一区| 日韩免费在线视频观看| 色婷婷狠狠综合| 国产夫妻在线观看| 日韩精品免费在线视频| 婷婷激情在线| 久久久久久久久久久亚洲| 日韩精选视频| 99久久精品无码一区二区毛片| 欧美大胆a级| 亚洲午夜精品一区二区| 国语精品一区| 中文字幕av不卡在线| 成人免费视频视频在线观看免费| 日本少妇高潮喷水xxxxxxx| ●精品国产综合乱码久久久久| 国产无套在线观看| 欧美日韩一区二区三区四区五区| 亚洲av无码国产综合专区| 亚洲男人第一网站| 午夜伦理在线视频| 国产精品看片资源| 国产精品黄网站| 亚洲五月六月| 香蕉精品999视频一区二区 | 隔壁人妻偷人bd中字| 久久激情中文| 白丝校花扒腿让我c| 欧美激情在线一区二区三区| 国产精品美女毛片真酒店| 欧美日韩久久久一区| 欧美成人片在线| 欧美激情啊啊啊| 久久人体av| 蜜桃精品久久久久久久免费影院 | 亚洲国产av一区二区| 伊人激情综合网| 悠悠资源网亚洲青| 99久久99久久精品国产片| 久久综合88| 精品久久久噜噜噜噜久久图片| 99久久婷婷国产综合精品电影| 欧美激情精品久久久久久免费 | 国产视频第二页| 一区二区三区天堂av| 国产免费不卡| 久久99九九| 亚洲美洲欧洲综合国产一区| 亚洲制服在线观看| 国产精品成人一区二区艾草 | 日本少妇在线观看| 欧美一区二区三区公司| 91精彩视频在线播放| 国产精品久久久久91| 最新亚洲精品| 欧美在线观看www| 国产超碰在线一区| 欧美黑吊大战白妞| 欧美一级久久久久久久大片| 色三级在线观看| 国产精品影院在线观看| 日韩在线看片| 自拍偷拍21p| 国产精品久久久久久久久免费樱桃 | 亚洲人人夜夜澡人人爽| 亚洲午夜三级在线| 亚洲女同志亚洲女同女播放| 久久久久久国产精品| 成人三级毛片| 日韩av综合在线观看| 99久久婷婷国产综合精品| 波多野结衣国产| 亚洲欧美视频在线| 亚洲第一会所001| 亚洲v日韩v欧美v综合| 另类中文字幕网| 999精品视频在线观看播放| 欧美一级淫片007| 肉肉视频在线观看| 国产在线视频欧美一区二区三区| 亚洲久色影视| 中国毛片在线观看| 欧美日韩国产综合一区二区| 黄色一级大片在线免费看产| 91在线播放国产| 在线 亚洲欧美在线综合一区| 你懂的在线观看网站| 色哟哟一区二区三区| 国产在线小视频| 国产主播精品在线| 欧美黄免费看| 亚洲av成人片色在线观看高潮| 日韩欧美精品网址| 91最新在线| 97av影视网在线观看| 国产欧美不卡| 国产无遮挡在线观看| 欧美一区二区三区四区高清| 大桥未久在线播放| 欧美一区二区视频在线| 久久机这里只有精品| 久久这里只有精品免费| 亚洲欧美国产一区二区三区 | 国产欧美欧洲| 久久这里有精品15一区二区三区| 久草福利资源在线| 亚洲成人激情在线| 精品日本视频| 亚洲理论电影在线观看| 久久久久九九视频| www.五月婷婷| 国产成人精品久久| 欧美成人一区二免费视频软件| av无码av天天av天天爽| 欧美猛男超大videosgay| heyzo高清在线| 亚洲一卡二卡三卡四卡无卡网站在线看| 国产精品一二二区| 波多野结衣av无码| 久久久亚洲网站| 欧美激情理论| 乐播av一区二区三区| 欧美电影免费提供在线观看| av在线日韩|