??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美午夜激情视频,欧美特黄视频,禁断一区二区三区在线http://m.shnenglu.com/tyt2008cn/Z忘却的记?/description>zh-cnMon, 17 Nov 2025 03:54:30 GMTMon, 17 Nov 2025 03:54:30 GMT60- Q{QWin32应用E序的加载与启动分析http://m.shnenglu.com/tyt2008cn/archive/2008/03/07/43898.html微尘微尘Fri, 07 Mar 2008 08:38:00 GMThttp://m.shnenglu.com/tyt2008cn/archive/2008/03/07/43898.htmlhttp://m.shnenglu.com/tyt2008cn/comments/43898.htmlhttp://m.shnenglu.com/tyt2008cn/archive/2008/03/07/43898.html#Feedback0http://m.shnenglu.com/tyt2008cn/comments/commentRss/43898.htmlhttp://m.shnenglu.com/tyt2008cn/services/trackbacks/43898.htmlchenxixia ?Blog
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=455591
设有一个Win32下的可执行文件MyApp.exeQ这是一个Win32应用E序Q符合标准的PE格式。MyApp.exe的主要执行代码都集中在其源文件MyApp.cpp中,该文件第一个被执行的函数是WinMain。初学者会认ؓE序是首先从这个WinMain函数开始执行,其实不然?
在WinMain函数被执行之前,有一pd复杂的加载动作,q要执行一大段启动代码。运行程序MyApp.exeӞ操作pȝ的加载程序首先ؓq程分配一?GB的虚拟地址I间Q然后把E序MyApp.exe所占用的磁盘空间作拟内存映到q个4GB的虚拟地址I间中。一般情况下Q会映射到虚拟地址I间?X00400000的位|。加载一个应用程序的旉比一般h所设想的要,因ؓ加蝲一个PE文gq不是把q个文g整个一ơ性的从磁盘读到内存中Q而是单的做一个内存映,映射一个大文g和映一个小文g所p的时间相差无几。当Ӟ真正执行文g中的代码Ӟ操作pȝq是要把存在于磁盘上的虚拟内存中的代码交换到物理内存(RAM)中。但是,q种交换也不是把整个文g所占用的虚拟地址I间一ơ性的全部从磁盘交换到物理内存中,操作pȝ会根据需要和内存占用情况交换一|多页。当Ӟq种交换是双向的Q即存在于物理内存中的一部分当前没有被用的也可能被交换到盘中?/p>
接着Q系l在内核中创E对象和ȝE对象以及其它内宏V?/p>
然后操作pȝ的加载程序搜索PE文g中的引入表,加蝲所有应用程序所使用的动态链接库。对动态链接库的加载与对应用程序的加蝲完全cM?/p>
再接着Q操作系l执行PE文g首部所指定地址处的代码Q开始应用程序主U程的执行。首先被执行的代码ƈ不是MyApp中的WinMain函数Q而是被称为C Runtime startup code的WinMainCRTStartup函数Q该函数是连接时p接程序附加到文gMyApp.exe中的。该函数得到新进E的全部命o行指针和环境变量的指针,完成一些Cq行时全局变量以及Cq行时内存分配函数的初始化工作。如果用C++~程Q还要执行全局cd象的构造函数。最后,WinMainCRTStartup函数调用WinMain函数?/p>
WinMainCRTStartup函数传给WinMain函数?个参数分别ؓQhInstance、hPrevInstance、lpCmdline、nCmdShow?/p>
hInstanceQ该q程所对应的应用程序当前实例的句柄。WinMainCRTStartup函数通过调用GetStartupInfo函数获得该参数的倹{该参数实际上是应用E序被加载到q程虚拟地址I间的地址Q通常情况下,对于大多数进E,该参数L0X00400000?/p>
hPrevInstanceQ应用程序前一实例的句柄。由于Win32应用E序的每一个实例Lq行在自q独立的进E地址I间中,因此Q对于Win32应用E序QWinMainCRTStartup函数传给该参数的值LNULL。如果应用程序希望知道是否有另一个实例在q行Q可以通过U程同步技术,创徏一个具有唯一名称的互斥量Q通过这个互斥量是否存在可以知道是否有另一个实例在q行?/p>
lpCmdlineQ命令行参数的指针。该指针指向一个以0l尾的字W串Q该字符串不包括应用E序名?/p>
nCmdShowQ指定如何显C应用程序窗口。如果该E序通过在资源管理器中双d标运行,WinMainCRTStartup函数传给该参数的gؓSW_SHOWNORMAL。如果通过在另一个应用程序中调用CreatProcess函数q行Q该参数由CreatProcess函数的参数lpStartupInfo(STARTUPINFO.wShowWindow)指定?/p>

]]> - Q{Q深入研I?C++中的 STL Deque 容器http://m.shnenglu.com/tyt2008cn/archive/2008/02/29/43497.html微尘微尘Fri, 29 Feb 2008 14:04:00 GMThttp://m.shnenglu.com/tyt2008cn/archive/2008/02/29/43497.htmlhttp://m.shnenglu.com/tyt2008cn/comments/43497.htmlhttp://m.shnenglu.com/tyt2008cn/archive/2008/02/29/43497.html#Feedback0http://m.shnenglu.com/tyt2008cn/comments/commentRss/43497.htmlhttp://m.shnenglu.com/tyt2008cn/services/trackbacks/43497.html
本文深入分析了std::dequeQƈ提供了一个指导思想Q当考虑到内存分配和执行性能的时候,使用std::deque要比std::vector好?br>
介绍
本文深入地研I了std::deque 容器。本文将讨论在一些情况下使用deque> 比vector更好。读完这文章后读者应该能够理解在定w增长的过E中deque 与vector在内存分配和性能的不同表现。由于deque> 和vector的用法很怼Q读者可以参考vector 文档中介l如何用STL容器?br>
Deque总览
deque和vector一样都是标准模板库中的内容Qdeque是双端队列,在接口上和vector非常怼Q在许多操作的地方可以直接替换。假如读者已l能够有效地使用vector容器Q下面提供deque的成员函数和操作Q进行对比参考?br>
Deque成员函数
函数
|
描述 |
c.assign(beg,end) c.assign(n,elem)
|
[beg; end)区间中的数据赋值给c?br>n个elem的拷贝赋值给c?/td>
|
c.at(idx)
|
传回索引idx所指的数据Q如果idx界Q抛出out_of_range?/td>
|
c.back()
|
传回最后一个数据,不检查这个数据是否存在?/td>
|
c.begin()
|
传回q代器重的可一个数据?/td>
|
c.clear()
|
U除容器中所有数据?/td>
|
deque<Elem> c deque<Elem> c1(c2) Deque<Elem> c(n) Deque<Elem> c(n, elem) Deque<Elem> c(beg,end) c.~deque<Elem>()
|
创徏一个空的deque?br>复制一个deque?br>创徏一个dequeQ含有n个数据,数据均已~省构造生?br>创徏一个含有n个elem拯的deque?br>创徏一个以[beg;end)区间的deque?br>销毁所有数据,释放内存?/td>
|
c.empty()
|
判断容器是否为空?/td>
|
c.end()
|
指向q代器中的最后一个数据地址?/td>
|
c.erase(pos) c.erase(beg,end)
|
删除pos位置的数据,传回下一个数据的位置?br>删除[beg,end)区间的数据,传回下一个数据的位置?/td>
|
c.front()
|
传回C个数据?/td>
|
get_allocator
|
使用构造函数返回一个拷贝?/td>
|
c.insert(pos,elem) c.insert(pos,n,elem) c.insert(pos,beg,end)
|
在pos位置插入一个elem拯Q传回新数据位置?br>在pos位置插入>n个elem数据。无q回倹{?br>在pos位置插入在[beg,end)区间的数据。无q回倹{?/td>
|
c.max_size()
|
q回容器中最大数据的数量?/td>
|
c.pop_back()
|
删除最后一个数据?/td>
|
c.pop_front()
|
删除头部数据?/td>
|
c.push_back(elem)
|
在尾部加入一个数据?/td>
|
c.push_front(elem)
|
在头部插入一个数据?/td>
|
c.rbegin()
|
传回一个逆向队列的第一个数据?/td>
|
c.rend()
|
传回一个逆向队列的最后一个数据的下一个位|?/td>
|
c.resize(num)
|
重新指定队列的长度?/td>
|
c.size()
|
q回容器中实际数据的个数?/td>
|
C1.swap(c2) Swap(c1,c2)
|
c1和c2元素互换?br>同上操作?/td>
|
Deque操作
函数
|
描述 |
operator[]
|
q回容器中指定位|的一个引用?/td>
|
上面q些特征和vector明显怼Q所以我们会提出下面的疑问?br>
问题Q如果deque和vector可以提供相同功能的时候,我们使用哪一个更好呢Q?br>
回答Q如果你要问的话Q就使用vector吧?br>
或者你l个解释Q?br>
非常高兴你这样问Q的,qƈ不是无中生有的,事实上,?a target=_blank>C++标准里解释了q个问题Q下面有一个片断:
vector在默认情况下是典型的使用序列的方法,对于dequeQ当使用插入删除操作的时候是一个更好的选择?br>
有趣的是Q本文就是要非常d地理解这句话?br>
什么是新的Q?/strong>
l读上面两张表格Q你会发现和vector比较q里增加了两个函数?br>
1、c.push_front(elem) —?在头部插入一个数据?br>
2、c.pop_front() —?删除头部数据?br>
调用Ҏ和c.push_back(elem)和c.pop_back()相同Q这些将来会告诉我们对于deque> 会非常有用,deque可以在前后加入数据?gt;
~少了什么?
同时你也会发现相对于vector> ~少了两个函敎ͼ你将了解到deque> 不需要它们?br>
1、capacity()—?q回vector当前的容量?br>
2、reserve() —?l指定大的vector> 分配I间?br>
q里是我们真正研I的开始,q里说明deque> 和vector它们在管理内部存储的时候是完全不同的。deque是大块大块地分配内存Q每ơ插入固定数量的数据。vector是就q分配内存(q可能不是一个坏的事情)。但我们应该x是,vector每次增加的内存够大的时候,在当前的内存不够的情c下面的实验来验证deque不需要capacity()和reserve()> 是非常有道理的?br>
实验一 —?增长的容?/strong>
目的
目的是通过实验来观察deque和vector在容量增长的时候有什么不同。用囑Ş来说明它们在分配内存和执行效率上的不同?br>
描述
q个实验的测试程序是从一个文件中d文本内容Q每行作Z个数据用push_back插入到deque> 和vector中,通过多次d文g来实现插入大量的数据Q下面这个类是Z试q个内容Q?br>
#include <deque> #include <fstream> #include <string> #include <vector>
static enum modes { FM_INVALID = 0, FM_VECTOR, FM_DEQUE };
class CVectorDequeTest { public: CVectorDequeTest(); void ReadTestFile(const char* szFile, int iMode) { char buff[0xFFFF] = {0}; std::ifstream inFile; inFile.open(szFile); while(!inFile.eof()) { inFile.getline(buff, sizeof(buff)); if(iMode == FM_VECTOR) m_vData.push_back(buff); else if(iMode == FM_DEQUE) m_dData.push_back(buff); } inFile.close(); } virtual ~CVectorDequeTest(); protected: std::vector<std::string> m_vData; std::deque<std::string> m_dData; }; |
l果
试E序q行的^台和一些条Ӟ
| CPU |
1.8 GHz Pentium 4 |
| 内存 |
1.50 GB |
| 操作pȝ |
W2K-SP4 |
| 文g中的行数 |
9874 |
q_每行字母个数
|
1755.85 |
L件的ơ数
|
45 |
| d插入的数据个?/td>
| 444330 |
使用Windowsd理器来记录执行效率Q本E序中用了Laurent Guinnard 的CDurationcR消耗系l资源如下图Q?br>
注意在vector分配内存的最高峰Qvector在分配内存的时候是怎样辑ֈ最高|deque是q样的,它在插入数据的同Ӟ内存直线增长Q首先deque的这U内存分配单元进行回收的话,存在意想不到的后果,我们希望它的分配内存看上dvector一P通过上面的测试我们需要进一步的试Q现提出一个假设:假设deque分配的内存不是连l的Q一定需要释攑֒收回内存Q我们将q些假设加入后面的测试中Q但是首先让我们从执行的性能外表分析一下这个实验?br>
I竟分配内存需要消耗多久?
注意看下面这张图片,vector在不插入数据的时候在q行L分配更多内存?br>
同时我们也注意到使用push_back插入一l数据消耗的旉Q注意,在这里每插入一l数据代表着9874个串Q^均每个串的长度是1755.85?br>
实验二—?vector::reserve()的资?/strong>
目的
q个实验的目的是vector在加入大量数据之前调用reserve()Q和dequeq行比较Q看它们的内存分配和执行效率怎么P
描述
本实验中的测试基本上和实验一相同Q除了在试cȝ构造函C加入下面q行代码:
| m_vData.reserve(1000000); |
l果
试E序q行的^台和一些条Ӟ
CPU
|
1.8 GHz Pentium 4 |
内存
|
1.50 GB |
操作pȝ
|
W2K-SP4 |
文g中的行数
|
9874 |
q_每行字母个数
|
1755.85 |
L件的ơ数
|
70 |
| d插入的数据个?br> |
691180 |
使用Windowsd理器来记录执行效率Q本E序中用了>Laurent Guinnard 的CDurationcR消耗系l资源如下图Q?br>
我们注意到vector不在需要分配花费多余的旉分配内存了,q是׃我们使用了reserve()对于所试?gt;691180个数据ؓ我们每一ơ插入大量数据的时候保留了_的内存空_对于deque存储分配的假设,观察q个试中的内存分配囑Ş和上一个图形,我们需要进一步量化这个测试?br>
怎样改良内存分配的性能呢?
下面q个图例说明随着数据的增加,定w在增加:
当增加数据的时候对定w的增加在vector和deque执行效率基本一P然而,vector在插入数据的时候有一些零星的旉消耗,看下面的图例Q?br>
通过l计分析vector和deque在插入^均ؓ>1755.85长度?gt;9874个数据所p的时_下面是ȝ的表|
Vector
|
Deque
|
Mean
|
0.603724814 sec
|
Maximum
|
0.738313000 sec
|
Minimum
|
0.559959000 sec
|
Std. Dev
|
0.037795736 sec
|
6-Sigma
|
0.226774416 sec
|
|
Mean
|
0.588021114 sec
|
Maximum
|
0.615617000 sec
|
Minimum
|
0.567503000 sec
|
Std. Dev
|
0.009907800 sec
|
6-Sigma
|
0.059446800 sec
|
|
实验三——内存回?/strong>
目的
本实验是对假设deque分配的内存不是͘q的Q而且很难回收q行量化试分析?br>
描述
在本实验中再ơ用C实验一中的代码Q在调用函数中加入记录增加数据执行的效率具体入下面操作:
for(xRun=0; xRun<NUMBER_OF_XRUNS; xRun++) { df = new CVectorDequeTest; elapsed_time = 0;
for(i=0; i<NUMBER_OF_RUNS*xRun; i++) { cout << "Deque - Run " << i << " of " << NUMBER_OF_RUNS*xRun << "... "; df->ReadTestFile("F:\\huge.csv",DF_DEQUE); deque_data.push_back(datapoint()); deque_data.back().time_to_read = df->GetProcessTime(); elapsed_time += deque_data.back().time_to_read; deque_data.back().elapsed_time = elapsed_time; cout << deque_data.back().time_to_read << " seconds\n"; } vnElements.push_back(df->GetDequeSize()); cout << "\n\nDeleting... "; del_deque.Start(); delete df; del_deque.Stop(); cout << del_deque.GetDuration()/1000000.0 << " seconds.\n\n"; vTimeToDelete.push_back(del_deque.GetDuration()/1000000.0); }
|
l果
本测试和上面两个实验在相同的q_上运行,除了插入的数据由>9874?gt;691180Q需要插?gt;70ơ,下面图例昄?gt;deque在插入数据的时候分配内存的情况Q在deque里插入了q_每个长度?gt;1755.85的字W串?gt;
管从几个曲U图中看到的实际消耗时间不同,但些曲线N_C>R2=95.15%。所l的数据炚w实际背离了下表中l计的曲U图数据:
deque Results
|
Mean
|
0.007089269 sec
|
Maximum
|
11.02838496 sec
|
Minimum
|
-15.25901667 sec
|
Std. Dev
|
3.3803636 sec
|
6-Sigma
|
20.2821816 sec
|
在相同的情况下比较vector的结果是非常有意义的。下面图是vector和deque在相同的情况下分配内存消耗的旉比较图:
q些数据在这个测试中?gt;R2=82.12%。这或许可以l过每个点反复运行得到更加优化,在这个问题中q些数据适当地标注了q些点,所l的数据炚w实际背离了下表中l计的曲U图数据:
vector Results
|
Mean
|
-0.007122715sec
|
Maximum
|
0.283452127 sec
|
Minimum
|
-0.26724459sec
|
Std. Dev
|
0.144572356sec
|
6-Sigma
|
0.867434136sec |
实验四—?vector::insert() ?deque::insert() 执行特点比较
目的
dequed使用参数为常量的insert()。但怎么栯和vector::insert()比较一下呢Q本实验的目的就是比较一下vector::insert()> ?deque::insert()的工作特炏V?
描述
在容器的容器多次插入数据Q在q里可能不符合你的需求,既然q样你可以用insert()Q试验代码也和实验一基本一P使用insert()代替push_back()Q用insert(>)来测试?br>
l果
当插入常量给deque的时候,从下囑֏以看出和vector的对比来?br>
注意两张囄中时间u的不同,q是?gt;61810个数据插入到容器中?br>
实验五——读取容器的性能
目的
q个实验测试vector::at(),vector::operator[],deque::at()和deque::operator[]的性能。首先应该是operator[]比atQ)效率要高Q因为它不进行边界检查,同时也比较vector和deque?br>
描述
q个实验测试中的容器有1000000个类型ؓstd::stringQ每个字W串长度?024的数据,分别使用at()和operator[]q两个操作来讉K容器容器的数据,试它们q行的时_q个试执行50ơ,l计每次执行的结果?br>
l果
我们看到使用vector和deque讉K容器中的数据Q他们执行的性能差别很小Q用operator[]和at()讉K数据的性能差别几乎可以忽略不计Q下面是l计的结果:
vector::at()
|
Mean
|
1.177088125sec
|
Maximum
|
1.189580000sec
|
Minimum
|
1.168340000sec
|
Std. Dev
|
0.006495193sec
|
6-Sigma
|
0.038971158sec
|
|
deque::at()
|
Mean
|
1.182364375sec
|
Maximum
|
1.226860000sec
|
Minimum
|
1.161270000sec
|
Std. Dev
|
0.016362148sec
|
6-Sigma
|
0.098172888sec
|
|
vector::operator[]
|
Mean
|
1.164221042sec
|
Maximum
|
1.192550000sec
|
Minimum
|
1.155690000sec
|
Std. Dev
|
0.007698520sec
|
6-Sigma
|
0.046191120sec
|
|
deque::operator[]
|
Mean
|
1.181507292sec
|
Maximum
|
1.218540000 sec
|
Minimum
|
1.162710000sec
|
Std. Dev
|
0.010275712sec
|
6-Sigma
|
0.061654272sec
|
|
l论
在这文章中我们覆盖了多U不同的情况来选择我们到底是该使用vectorq是deque。让我们ȝ一下测试的l果看下面几个结论?br>
当执行大数据量的调用push_back()的时候,C要调用vector::reserve()?br>
在实验一中我们研I了vector和deque在插入数据的情况。通过q些假设Q我们可以看出deque分配的空间是预先分配好的Qdequel持一个固定增长率Q在vector实验中我们考虑到应该调用vecor::reserve()>.然后在下面这个例子验证了我们的假设,在用vector的时候调用reserve()能够膀子我们预先分配空_q将是vector一个默认选择的操作?br>
当你分配很多内存单元的时候,C使用deque回收内存要比vector消耗时间多?br>
在实验三中我们探讨了vector和deque在回攉L内存块上的不同,分别证明了vector在分配内存的时候是U性增长,而deque是指数增长,同样Qvector要回收的内存比deque多的多,如果你@环调用了push_back()Q那么deque获取大量的内存Q而且是͘q的。我们通过试发现在分配内存单元消耗的旉和vector的时间接q?br>
如果你计划用insert()Q或者需要pop_front()Q那׃用deque?br>
׃vector没有提供pop_front()函数Q但在实验四的结果中可以看出没有insert()是非常好的,同时也告诉我们ؓ什么deque在STLcM要作为单独的一个类划分出来?br>
对于讉K数据Qvector::at()效率最高?br>
在实验五中统计的数据表示Q所有访问数据方法的效率是非常接q的Q但是vector::at()效率最高。这是因为最优的q图访问时间ؓ最低的六个西格玛倹{?br>
最?/strong>
我希望本文能够带你认识dequeQ而且对它感兴或者一个启发,Ƣ迎l箋讨论关于vector和dequeM问题和内宏V?

]]> - 也谈 extern "C" 的用?/title>http://m.shnenglu.com/tyt2008cn/archive/2008/02/25/43231.html微尘微尘Mon, 25 Feb 2008 12:46:00 GMThttp://m.shnenglu.com/tyt2008cn/archive/2008/02/25/43231.htmlhttp://m.shnenglu.com/tyt2008cn/comments/43231.htmlhttp://m.shnenglu.com/tyt2008cn/archive/2008/02/25/43231.html#Feedback0http://m.shnenglu.com/tyt2008cn/comments/commentRss/43231.htmlhttp://m.shnenglu.com/tyt2008cn/services/trackbacks/43231.html 怿大家在编码中Q有时会见到某某函数前面加了 extern "C" 的关键字修饰Q尤其在模块(Dll)提供的头文g中。但是否很清楚的了解它的作用Q?我当时第一ơ碰到时Q其实是懂非懂的^_^。查了些资料Q才明白其用法,详细如下?br>
1. 首先说下~译器编译函数时Q对函数名的处理?br> 在C语言中,对函数如: IRoleView* RoleViewCreate(int nType); ~译后生成的函数名是RoleViewCreate
但是在C++中,׃存在函数重蝲的特性,所以编译时C++~译器会Ҏ参数、返回值等信息对函数名改编Q如上面函数在C++~译器中生成的函数名??RoleViewCreate@@YAPAVIRoleView@@H@z
2. extern "C"的含义?br> extern "C" 有两重含义:
其一Q被修饰的变量或函数是extern的存储类型,它告诉编译器Q其声明的变量或函数可以被本模块和外部某块用?br> 其二Q被其修饰的函数或变量是按照C语言的方式来~译和链接的?br> 注意Qextern "C"写法 只在C++中被支持QC语言不支持该写法?br>
3. extern "C"的两U惯用用法:
a) 在C++中用C语言的函数或变量Q在包含C语言提供的头文g是,需要用 extern "C" { } 来包含头文g。如下:
extern "C"
{
#include "lua.h" //lua.h是C~写Qƈ提供的头文g
}
q里引用下第1点的函数来说明上q写法的用途:假设lua.h中包含函?IRoleView* RoleViewCreate(int nType), 那么C语言的编译时生成的函数名是RoleViewCreateQ而当C++客户E序M用它Ӟ默认是按C++的链接方式(即不加以上的 extern "C"ӞQ所以C++客户E序会去外部模块中查扑և数名?br>?RoleViewCreate@@YAPAVIRoleView@@H@z的函敎ͼq样C++~译器会找不到该函数Q报?无法解析的外部标识符"的错误; 而当加上
extern "C" { } Ӟ它就告诉~译器头文g中包含的函数或变量要按照C语言的编译链接方式进行,所以C++~译器会d部模块查扑և数名?br>RoleViewCreate的函敎ͼ从而得到正结果?br>
b) 在C中调用一个C++语言中的函数或变量时QC++的头文g需要添?extern "C"Q这是ؓ了让~译器对函数或变量按C语言的方式进行编译,已供C语言调用Q?但在C语言中,不能直接包含声明了extern "C"的头文gQ而应该在C文g中把在C++头文件中定义的函敎ͼ声明?externcdQ因为在C语言中,q不支持extern "C"的写法;
参考资料:《C++中extern "C" 含义深层探烦》作者:宋宝?br> 《C++ Primer?br>

]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
99ƷȾþ|
Ըٸһ|
ŷպ|
ŷպһ|
ŷһ|
ŷƷ|
ŷƵһ߹ۿ|
Ʒһ|
Ʒþþþ|
ƷҹӰ|
˾þŮͼƬ|
ѹۿ߹ۿ|
ŷ|
ŷһ|
þü|
ŷ|
Ʒaa|
9ˬ˾Ʒ|
һƵ|
ŷĻþ|
ŷjizzhdƷŷˮ|
ŷձ|
ŷƵ|
ŷ߲|
ëƬһ|
պŷһ|
۾þþõӰ|
ŷƵ|
Ӱۺ|
ŷƷպۺ|
ҹƷþþþþ|
˳ӰԺ|
þþþþþŷƷ|
һav|
ŽһͼƬ|
ŷƵƷһ|
պŷһ|
ҹƷþþþþ99|
ŷպƷ|
ۺϾƷһ|
ŷƬ߹ۿһ|
ۺŷ߿|
һ|
Ʒ|
Ůһ|
|
պƷƵ|
þþþþ|
ƷպƷŷ|
ҹҹˬavƷ|
ŷþþ|
ѼëƬһ|
ۺ|
þþ7777|
ŷһҹҹƬ|
ŷҹƷþþþþó|
ձĻ߲|
պ|
ѳ˻ɫav|
Ƶ|
ŷ˶˫|
þƷƷС˵|
ݺۺϾþ|
ŷ+ձ++aŹۿ|
þþƷþ˼˼|
һ߹ۿŷ|
Ůë**Ʒžž|
þþþþƷĻ|
߹ŷ|
ۺƵ߹ۿ|
ŷ|
һ߹ۿƵ
|
Ʒchinese|
㽶߹ۿ|
þѸ|
þֻѹۿ|
ŷһ߹ۿ|
aƵ|
ŷۺ|
ŷƵ|
ŷһ13˾|
Ʒ1234|
Ӱ|
Ʒ˿av۲ӰԺ|
ŷ|
Ůþ|
ѹۿ|
þþƷպ|
ŮɫƬ|
ۺϵ|
Ʒһ|
|
Ʒ츣|
ŷƬһ|
ŷƵƷ|
þۺϸϾþúݺɫ
|
Ʒպһ|
ջպav|
ŷպѹۿһ
|
ҹav2018|
ѾƷƵ|
99ƷƵ|
Ƶѿ|
պдƵ߹ۿ|
ݺɫݺɫۺtg|
һɫþۺƷ|
鶡ۺ|
Ƶպ|
ƷƵ|
ŷרһҳ|
Ƶ߶|
þaaaaxxxx|
ŷһƵ|
ŷƵ|
˾Ʒþ|
պ1|
һѹۿ|
ƷƵ߹ۿ|
ŷһƷþþ|
ƷӰԺ߹ۿ|
þþþƷ999|
þüƵ|
Ʒþþþһ|
Ʒþþþþһվ|
һ|
ŷһһ|
ŷһӰþ|
Ʒþ|
һ ߹ۿƵ|
뾫ƷԿ
|
Ƶһ|
ۺ|
ŷҹþþ|
91þþƷ|
ëƬ
|
ŷӰԺ|
ۺƵ߹ۿ|
91þþƷ91þɫtv
|
þȷӰ|
91Ʒһ|
߾Ʒһҹɫ|
һƵ߹ۿƵ|
ҹҳ|
Ʒ|
ŷƵ|
ŷպ˾ƷӰԺ|
Ʒ˹ۿƵ
|
㶮ĹƷ|
ۺϾþ|
þ|
պһ|
ҹҹҹþþ|
Ʒþþþ999|
һ߲|
ȷӰþþ|
Ƶŷ|
༤|
һ|
ŷ|
վ|
Ʒþþþþþþùý|
Ʒַ|
þwww_ƬѲ|
һƵ|
ŷƷ|
ŷһһ|
ŷպۺ϶|
ҹƷһ|
˾þۺһ|
ŷƷһþþ|
պŷ|
þþþþþ|
Ʒ99þþþþ
|
Ʒ߹ۿ|
ѳ˻ɫ|
ҹƷþþþþþþ|
ѿһŷ|
һƵۿ|
ŷղ99|
þۺɫ|
˽ӰԺ߹ۿ|
ѳav|
ҹӰԺպ|
պ|
һӰԺ|
Ʒڸ|
ŷڶҳ|
þþþùƷһ|
һ߹ۿ|
ŷ պ һ|
ҹƷþþþþþ99˳|
ݺݶۺϾþþ|
Ʒۺɫ߹ۿ|
ŷպ91|
ձŷ|
һպ|
avһ|
ƷþþþëƬƨ
|
Ƶŷһ|
ëƬ|