锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲全部视频,国产精品综合视频,国产精品美女一区二区在线观看http://m.shnenglu.com/feixuwu/archive/2011/05/14/146395.htmlfeixuwufeixuwuSat, 14 May 2011 13:16:00 GMThttp://m.shnenglu.com/feixuwu/archive/2011/05/14/146395.htmlhttp://m.shnenglu.com/feixuwu/comments/146395.htmlhttp://m.shnenglu.com/feixuwu/archive/2011/05/14/146395.html#Feedback0http://m.shnenglu.com/feixuwu/comments/commentRss/146395.htmlhttp://m.shnenglu.com/feixuwu/services/trackbacks/146395.html 闂   鏈榪戞父鎴忓紑濮嬫妧鏈皝嫻嬩簡錛屼笉榪囧垰鍒氫笂綰?涓皬鏃訛紝Server灝辨寕浜嗭紝鎸傚湪妗嗘灦浠g爜閲岋紝涓涓笉鍙兘鎸傜殑鍦版柟銆?br />浠嶤allStack鐪嬶紝鏄湪鑾峰彇鏁版嵁鏃跺彂閫佽姹傚寘鐨勬椂鍊欐寕鐨勶紝鐢變簬妗嗘灦閮ㄥ垎鏄叾浠栭儴闂ㄧ殑鍚屼簨寮鍙戠殑錛屾墍浠ユ煡闂鐨勬椂鍊欏氨鎷変笂浠栦滑浜嗭紝
澶у鎶樿吘浜?澶╋紝娌℃湁瀹炶川鎬х殑榪涘睍錛屾湇鍔″櫒榪樻槸鍩烘湰涓婃瘡3涓皬鏃跺畷鏈轟竴嬈°傜敱浜庝笂灞傞昏緫澶ч儴鍒嗛兘鍦ㄦ垜閭o紝鎵浠ュ帇鍔涙瘮杈冨ぇ錛屽畷鏈虹殑鐩存帴鍘熷洜鏄痟ashtable鐨勪竴涓《鐨勬寚閽堝紓甯革紝
榪欎釜hashtable鏄鏋朵唬鐮佺殑涓涓唴閮ㄦ垚鍛橈紝鎸夐亾鐞嗘垜浠槸鏃犱粠鐮村潖鐨勶紝鍙湁鍙兘鏄綰跨▼鐜涓嬭凱浠e櫒鎹熷潖瀵艱嚧鐨勩?br />浣嗘槸妗嗘灦浠g爜鍦ㄨ繖涓湴鏂圭‘瀹炴棤鎳堝彲鍑伙紝鎵浠ョ湡姝g殑鍘熷洜搴旇榪樻槸涓婂眰浠g爜鐮村潖浜嗗爢鍐呭瓨錛屽緢鍙兘鏄竴涓猰emcpy瓚婄晫瀵艱嚧鐨勩傝繖姣曠珶鏄釜鐚滄兂錛屽浣曟壘鍒拌瘉鎹憿錛岃繖鏄釜闂銆?br />鎶婃墍鏈変唬鐮侀噷鐨刴emcpy嫻忚浜嗕竴閬嶏紝娌℃湁鍙戠幇鏄庢樉闂銆?br />

鐚滄祴

  涓鑸父鎴忎腑姣旇緝瀹規槗鍑虹幇浣嗘槸涓嶅ソ鏌ョ殑闂寰堝鏃跺欓兘鏄剼鏈紙lua錛夊鑷寸殑錛屾垜浠殑鑴氭湰閮ㄥ垎鏄竴涓悓浜嬪嚑騫村墠鍐欑殑錛屽湪鍑犱釜浜у搧涓兘浣跨敤榪囷紝鎸夐亾鐞嗘病榪欎箞鑴嗗急錛屼笉榪囪佸ぇ榪樻槸鍜屾渶鍒濆紑鍙戣繖涓ā鍧楃殑閮ㄩ棬娌熼氫簡涓嬶紝
榪樼湡鍙戠幇闂浜嗭紝璧剁揣鎷夸簡鏂扮殑鐗堟湰鏇存柊涓婂幓銆傜粡榪囦竴澶╃殑瑙傚療錛屾湇鍔″櫒娌℃湁瀹曟満浜嗭紝OK錛岄棶棰樼宸цВ鍐充簡,鑳屼簡榪欎箞涔呯殑榛戦攨錛岀粓浜庢斁涓嬫潵浜嗐?br />

PageHeap

   鍋囧娌℃湁紕板閥瑙e喅浜嗚繖涓棶棰橈紝姝e父鐨勬濊礬璇ュ浣曡В鍐寵繖涓棶棰樺憿錛岃繖涓椂鍊欐垜鎬蹇祑indows浜嗭紝鍦╳indows涓嬫湁PageHeap鏉ヨВ鍐寵繖綾誨啓瓚婄晫鐨勯棶棰樸傚熀鏈濊礬灝辨槸姣忔鍒嗛厤鍐呭瓨鐨勬椂鍊欙紝閮藉皢鍐呭瓨鐨勭粨灝炬斁鍦ㄩ〉鐨勮竟緙橈紝绱ф帴鐫榪欏潡鍐呭瓨鍒嗛厤涓鍧椾笉鑳藉啓鐨勫唴瀛橈紝榪欐牱錛屼竴鏃﹀啓瓚婄晫錛屽氨浼氬啓寮傚父錛屽鑷村畷鏈恒俵inux涓嬫病鏈夌幇鎴愮殑宸ュ叿錛屼絾鏄痩inux鎻愪緵浜唌map鍔熻兘錛屾垜浠彲浠ヨ嚜宸卞疄鐜拌繖鏍蜂竴涓姛鑳斤紝褰撶劧錛岃繖涓鍒囬兘涓嶇敤鑷繁鍔ㄦ墜浜嗭紝tcmalloc宸茬粡鍖呭惈浜?br />榪欎釜鍔熻兘浜嗭紝涓嶈繃鍦ㄦ枃妗i噷鍩烘湰娌℃湁浠嬬粛錛屾垜涔熸槸鍦ㄩ槄璇籺cmalloc浠g爜鏃剁湅鍒扮殑錛岃繖涓姛鑳介粯璁ゆ槸鍏抽棴鐨勶紝鎵撳紑榪欎釜寮鍏抽渶瑕佹敼鍐欎唬鐮侊細

榪欎釜浠g爜鍦╠ebugallocation.cc閲岋細

DEFINE_bool(malloc_page_fence,
            EnvToBool("TCMALLOC_PAGE_FENCE", false),
            "Enables putting of memory allocations at page boundaries "
            "with a guard page following the allocation (to catch buffer "
            "overruns right when they happen).");
鎶奻alse鏀規垚true灝卞彲浠ヤ簡銆?br />鎯寵鍦ㄩ」鐩噷鍔犲叆PageHeap鍔熻兘錛屽彧闇瑕侀摼鎺ョ殑鏃跺欏姞涓?-ltcmalloc_debug鍗沖彲銆傛妸瀹冨姞鍏ラ」鐩腑錛岃瘯鐫榪愯涓嬶紝鐩存帴鎸備簡錛?br />浠旂粏涓鐪嬶紝鍘熸潵鏄」鐩腑寰堝鎴愬憳鍙橀噺娌℃湁鍒濆鍖栧鑷寸殑錛宼cmalloc_debug浼氳嚜鍔ㄥ皢new 鍜宮alloc鍑烘潵鐨勫唴瀛樺垵濮嬪寲涓烘寚瀹氬鹼紝榪欐牱錛屼竴鏃﹀彉閲忔病鏈夊垵濮嬪寲錛屽緢瀹規槗灝辨毚闇蹭簡銆?br />淇敼瀹岃繖涓棶棰樺悗錛岀紪璇戯紝鍐嶈繍琛岋紝榪樻槸鎸傦紝榪欎釜鏄痬protect鐨勬椂鍊欐寕鐨勶紝閿欒鏄唴瀛樹笉澶燂紝榪欐庝箞鍙兘鍛紝鍏跺疄鏄揪鍒頒簡璧勬簮闄愬埗浜嗐?br />echo 128000 > /proc/sys/vm/max_map_count
鎶妋ap鏁伴噺闄愬埗鍔犲ぇ,鍐嶈繍琛岋紝OK浜嗭紒
 
  浣嗘槸娓告垙Server鍚姩鍚庯紝鍙戠幇涓涓棶棰橈紝CPU闀挎湡澶勪簬100%錛屽鑷寸櫥闄嗕竴涓帺瀹墮兘寰堝洶闅撅紝gdb涓柇鍚庯紝info thread錛屽彂鐜板ぇ閮ㄥ垎鐨勬搷浣滈兘鍦╩map鍜宮protect,鏈寮濮?br />鎬鐤戞垜鐨刲inux鐗堟湰鏈夐棶棰橈紝瀵艱嚧榪?涓狝P鎱紝鍐欎簡嫻嬭瘯紼嬪簭璇曚簡涓嬶紝鍙戠幇鍏跺疄API涓嶆參錛屼及璁℃槸棰戠箒璋冪敤瀵艱嚧鐨勩?br />鎵浠ュ緱鎹㈢鎬濊礬浼樺寲涓嬫墠鍙互錛屽叾瀹炲ぇ閮ㄥ垎鎯呭喌涓嬶紝鎴戜滑free鐨勬椂鍊欙紝鏃犻渶灝嗛〉闈unmap鎺夛紝鍙互鍏坈ache榪涙潵錛屼笅嬈″垎閰嶇殑鏃跺欙紝濡傛灉鏈夛紝鐩存帴鎷挎潵鐢ㄥ氨鍙互浜嗐?br />鏈綆鍗曠殑cache綆楁硶灝辨槸瀹氫箟涓涓獀oid* s_pageCache[50000]鏁扮粍錛岄〉闈㈡暟鐩稿悓鐨勫唴瀛樼粍鎴愪竴涓摼琛紝鎸傚湪涓涓暟緇勯」涓嬶紝榪欎釜寰堝儚STL鐨勫皬鍐呭瓨澶勭悊錛屾垜浠彲浠ュ皢mmap鍑烘潵鐨勫唴瀛樼殑
鍓嶉潰鍑犱釜瀛楄妭(涓涓寚閽堝ぇ灝?鐢ㄤ簬绱㈠紩涓嬩竴涓猣reePage銆傚綋鐒惰繖涓繃紼嬮渶瑕佸姞閿侊紝涓嶈兘鐢╬thread鐨勯攣錛堝洜涓轟粬浠細璋冪敤malloc絳夊唴瀛樺垎閰嶅嚱鏁幫級錛屽繀欏葷敤spinlock錛屼粠linux婧愮爜閲岀洿鎺ユ妱涓涓繃鏉ュ嵆鍙?br />static void*   s_pagePool[MAX_PAGE_ALLOC]={0};

malloc鐨勬椂鍊欙紝鍏堜粠pagePool閲岄潰鑾峰彇:
// 鍏堜粠pagePool鎵?br /> void* pFreePage = NULL;
 spin_lock(&s_pageHeapLock);
 assert(nPageNum < MAX_PAGE_ALLOC);
 if(s_pagePool[nPageNum])
 {
   pFreePage = s_pagePool[nPageNum];
   void* pNextFreePage = *((void**)pFreePage);
   s_pagePool[nPageNum] = pNextFreePage;
 }
 spin_unlock(&s_pageHeapLock);

free鍐呭瓨鐨勬椂鍊欙紝鐩存帴鏀懼埌pagePoll閲?
spin_lock(&s_pageHeapLock);
 assert(nPageNum < MAX_PAGE_ALLOC);
 void* pNextFree = s_pagePool[nPageNum];
 *(void**)pAddress = pNextFree;
 s_pagePool[nPageNum] = pAddress;
 
 spin_unlock(&s_pageHeapLock);

緙栬瘧銆佽繍琛?OK浜嗭紝CPU榪呴熼檷涓嬫潵浜嗭紝絀鴻澆鐨勬椂鍊欎笉鍒?%,鑰屼笖涔熻兘杈懼埌媯嫻嬪啓婧㈠嚭鐨勯棶棰樸?br />


feixuwu 2011-05-14 21:16 鍙戣〃璇勮
]]>
core鍜孋allStackhttp://m.shnenglu.com/feixuwu/archive/2011/04/10/143871.htmlfeixuwufeixuwuSun, 10 Apr 2011 06:47:00 GMThttp://m.shnenglu.com/feixuwu/archive/2011/04/10/143871.htmlhttp://m.shnenglu.com/feixuwu/comments/143871.htmlhttp://m.shnenglu.com/feixuwu/archive/2011/04/10/143871.html#Feedback0http://m.shnenglu.com/feixuwu/comments/commentRss/143871.htmlhttp://m.shnenglu.com/feixuwu/services/trackbacks/143871.html  鏈榪戦」鐩紑濮嬮泦涓祴璇曚簡錛屾湇鍔″櫒紼嬪簭緇忓父crash錛岀敱浜庢湇鍔″櫒涓鑸儏鍐典笅閮芥槸鍏抽棴浜哻ore鐨勶紝鎵浠ュソ鍑犳閮藉彧鑳介氳繃鏉備貢鐨勬棩蹇楁潵瀹氫綅闂銆?br>褰撶劧錛屾垜浠彲浠ラ氳繃ulimit鏉ユ墦寮core寮鍏籌紝涓嶈繃榪欏彲鑳藉甫鏉ユ柊鐨勯棶棰橈細鎴戜滑鐨勬湇鍔″櫒紼嬪簭姣忎釜core鏂囦歡澶ф鏈?G澶氾紝嫻嬭瘯鏈熼棿濡傛灉棰戠箒crash,娌℃湁娉ㄦ剰鍙婃椂娓呯悊錛屼竴涓嶅皬蹇冨氨浼氭妸紓佺洏鍐欐弧錛?br>鑰屼笖core鏂囦歡姣曠珶鏄拰榪涚▼紼嬪簭鐩稿叧鐨勶紝鏈夋椂鍊欐壘鐩稿簲鐗堟湰涔熸槸涓夯鐑︿簨銆?br>
鑳藉惁鍦ㄧ▼搴廲rash鐨勬椂鍊欙紝灝哻allStack浠ュ強鍙傛暟鍜屽眬閮ㄥ彉閲忛兘璁板綍鍒版棩蹇楅噷錛?br>榪欎釜鎶鏈叾瀹炲湪娓告垙瀹㈡埛绔凡緇忕敤浜嗗緢澶氬勾浜嗭紝涓鑸父鎴忓鎴風crash鍚庯紝閮戒細寮瑰嚭涓涓槸鍚﹀彂閫侀敊璇殑閫夋嫨妗嗭紝鍏跺疄灝辨槸鍙戦佺殑CallStack鐨勬棩蹇楀拰MiniDUmp鏂囦歡銆?br>瑕佹兂璁板綍CallStack灝卞繀鐒舵秹鍙婂埌Stack鐨勯亶鍘嗭紝linux涓嬬殑Stack閬嶅巻浣跨敤寰堢畝鍗曪紝綆鍗曠殑backtrace灝卞彲浠ユ悶瀹氾紝man backtrace灝辨湁鐜版垚鐨勪緥瀛愶紝
榪欐瘮windows涓嬪鏉傜殑澶寸柤鐨凷tackWalk濂界敤鐨勫銆?br>
瑙e喅浜哠tack閬嶅巻闂鍚庯紝榪樺墿涓嬩竴涓棶棰橈細濡備綍鍦ㄧ▼搴廲rash鐨勬椂鍊欏緱鍒伴氱煡鎵ц鎴戜滑鑷繁鐨刣ump浠g爜錛?br>鍦╓indwos涓嬫湁SEH寮傚父鏉ュ疄鐜拌繖涓姛鑳斤紝鑰宭inux涓嬪彲浠ラ氳繃浣跨敤淇″彿鍦ㄨ繘紼媍rash鐨勬椂鍊欐墽琛岃嚜宸辯殑澶勭悊浠g爜銆?br>
濂戒簡錛屽紑濮嬪啓涓畝鍗曚唬鐮佹祴璇曚笅:
棣栧厛璁劇疆鍑犱釜涓昏crash淇″彿鐨勫鐞嗗嚱鏁?br>signal(SIGSEGV, &DumpHelper::OnCrash);
signal(SIGABRT, &DumpHelper::OnCrash);
signal(SIGFPE, &DumpHelper::OnCrash);

鍦∣nCrash閲屾垜浠敤鍓嶉潰鎻愬埌鐨刡acktrace緋誨垪鍑芥暟錛屾潵璁板綍鍫嗘爤:
void* szStackFrame[100];
int nFrameCount = backtrace(szStackFrame, 100);
char** strFrameInfo = backtrace_symbols(szStackFrame, nFrameCount); 
char szDumpFileName[1024] = {0};
snprintf(szDumpFileName, sizeof(szDumpFileName), "dump_%u.log", (unsigned int)time(NULL) );
FILE* pFile = fopen(szDumpFileName, "wb");
if(!pFile) return;
for(int i = 0; i < nFrameCount; i++)
{
    fprintf(pFile, "%s\n", strFrameInfo[i]);
}
fclose(pFile);
free(strFrameInfo);

鎺ョ潃錛岃緗嚑涓祵濂楄皟鐢ㄧ殑鍑芥暟錛?br>void fun()
{
 //assert(0);
 int* p = NULL;
 *p =3;
}

void fun1()
{
 fun();
}

void fun2()
{
 fun1();
}

void fun3()
{
 fun2();
}

鏈鍚庯紝鎴戜滑鍦╩ain鍑芥暟閲屾墽琛宖un3,娉ㄦ剰緙栬瘧鐨勬椂鍊欏甫涓?rdynamic 閫夐」銆?span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">

榪愯涓嬶紝鏋滅劧鍙互鎵撳嵃鍩烘湰鐨勫爢鏍堬紝涓嶈繃椹笂錛屽彂鐜頒簡鏂扮殑闂錛氳繖涓爢鏍堜俊鎭篃澶畝闄嬩簡錛屽彧鏈夎皟鐢ㄥ嚱鏁扮殑鍚嶅瓧錛屽叾浣欑殑鍙傛暟銆佸眬閮ㄥ彉閲忓畬鍏ㄦ病鏈夛紝
榪欎釜鍜実db鑳界湅鍒扮殑callStack宸窛涔熷お澶т簡銆?br>瑙e喅榪欎釜闂鏈綆鍗曠殑鍔炴硶灝辨槸鐢╣db鏉ユ墦鍗板爢鏍?鍦ㄨ繖閲岋紝gdb鍜屽叾浠栫▼搴忔湁鍖哄埆錛屽鏋滀綘璇曞浘閫氳繃 echo "bt"|gdb -p XXX>a.txt鏉ヨ幏寰楀爢鏍堬紝閭e皢浼氶潪甯稿け鏈涳紝
鏍規湰涓嶈搗浣滅敤錛実oogle浜嗕笅錛屽熀鏈病浠涔堣В鍐沖姙娉曘?br>涓嶈繃gdb 鍙互浠庢枃浠惰鍏ユ寚浠わ紝渚嬪 gdb XXX<cmddata錛岃繖緇欎簡鎴戜滑鏈轟細錛?br>system("echo  \"bt full|gcore\">testcmd");
  char dbx[160]={0};
     sprintf(dbx, "gdb -p %d ./main<testcmd >gdbdump_%d.log", getpid(), getpid() );
  system(dbx);

嫻嬭瘯榪愯錛屽彂鐜板彲浠ユ墦鍗拌緇嗙殑鍫嗘爤錛屼笉榪囷紝瑕佹眰鏈哄櫒涓婃湁gdb.
涓婇潰鐨勫懡浠よ繕dump浜嗕竴涓猚ore鏂囦歡錛屼笉榪囪繖涓猚ore鏂囦歡鐨勫爢鏍堜俊鎭槸閿欒鐨勶紝鎴戜笉鐭ラ亾涓轟粈涔堛傘傘傘?br>
澶氱嚎紼嬬幆澧冧笅浣跨敤涓婅堪鍔炴硶錛屽彧鑳借緭鍑轟竴涓嚎紼嬬殑鍫嗘爤錛岄渶瑕佸厛鑾峰彇綰跨▼鏁扮洰錛岀劧鍚庨愪釜綰跨▼鎵撳嵃鍫嗘爤銆?br>
鏈鍚庯紝涓轟簡閬垮厤褰卞搷姝e父鐨刢oredump,瑕佸湪OnCrash鐨勫鐞嗗嚱鏁伴噷灝嗕俊鍙風殑澶勭悊鍑芥暟璁劇疆涓洪粯璁ゃ?br>濡傛灉鎴戜竴瀹氳鏈塩ore鍛紝setrlimit鍚э紝鍘繪帀core闄愬埗鍗沖彲銆?/span>

feixuwu 2011-04-10 14:47 鍙戣〃璇勮
]]>
GCC欏圭洰緙栬瘧閫熷害浼樺寲http://m.shnenglu.com/feixuwu/archive/2011/03/19/142210.htmlfeixuwufeixuwuSat, 19 Mar 2011 08:39:00 GMThttp://m.shnenglu.com/feixuwu/archive/2011/03/19/142210.htmlhttp://m.shnenglu.com/feixuwu/comments/142210.htmlhttp://m.shnenglu.com/feixuwu/archive/2011/03/19/142210.html#Feedback5http://m.shnenglu.com/feixuwu/comments/commentRss/142210.htmlhttp://m.shnenglu.com/feixuwu/services/trackbacks/142210.html鎵ц鏂囦歡錛屽熀鏈笉鑰冭檻緙栬瘧鎴愬姩鎬佸簱錛屾墍鏈変唬鐮佺殑澶存枃浠朵緷璧栦篃鏄竴鍥㈢碂錛岄殢鐫欏圭洰鐨勫澶э紝緙栬瘧閫熷害瓚婃潵瓚婃參錛屽埌鍚庢潵緙栬瘧涓涓」鐩?榪涚▼鍚屾椂緙栬瘧閮介渶瑕?0鏉ュ垎閽熴?br> 
  鍏跺疄鍒嗘瀽涓嬪彲浠ュ彂鐜幫紝涓昏鐨勭紪璇戦熷害鎹熻楀湪澶存枃浠朵笂錛屽挨鍏舵槸妯℃澘鐩稿叧鐨勫ご鏂囦歡銆俈C鏈変竴涓緙栬瘧澶存枃浠舵妧鏈紝灝嗗父鐢ㄧ殑鍏叡澶存枃浠舵斁鍦ㄤ竴璧鳳紝棰勫厛緙栬瘧鎴恜ch鏂囦歡錛岃繖鏍?br>鍙互鍔犲揩緙栬瘧閫熷害銆俫cc鍒板簳鏈夋病鏈夌被浼兼妧鏈憿錛屾墦寮gcc鐨勬墜鍐屾悳绱簡precompiled錛屽彂鐜拌繕鐪熸湁鐩稿叧浠嬬粛錛屼嬌鐢ㄦ柟娉曚篃寰堢畝鍗曘?br> 
涓昏鏄互涓嬫楠わ細
  1銆佸湪欏圭洰涓嬪緩绔嬩竴涓?stdafx.h鐨勬枃浠訛紝鍖呭惈浜嗗ぇ閮ㄥ垎鍏叡澶存枃浠躲傚湪姣忎釜cpp鏈寮濮嬮兘#include "stdafx.h"銆俢pp鏂囦歡鍖呭惈浜嗚繖涓緙栬瘧澶存枃浠跺悗錛屽氨鍙互灝嗗師鏉ュ拰
stdafx .h 閲屽ご鏂囦歡閲嶅鐨勫唴瀹瑰垹闄や簡錛屽挨鍏舵槸妯℃澘鐩稿叧鐨勫ご鏂囦歡錛屽彟澶栵紝闈濸CH鐨勫ご鏂囦歡閲屽敖閲忓皯鍖呭惈鍏朵粬澶存枃浠躲?nbsp;    
  2銆佷慨鏀筸akefile鏂囦歡, 鍔犲叆OBJ瀵?gch鐨勪緷璧?鐢ㄤ竴涓畝鍗曠殑欏圭洰鍋氱ず渚嬶紝涓鐪嬪氨鏄庣櫧
   
TARGET=TimerTest
PCH=stdafx.h.gch
PCH_H=stdafx.h
OBJ=stdafx.o TimerManager.o TimerTest.o

%.o:%.cpp
    g++ -Wall -c -g $^ -o $@

$(TARGET):$(OBJ)
    g++ -g  $^ -o $@


pch.d:stdafx.cpp
    g++ -g -MM stdafx.cpp |sed 's/stdafx.o/stdafx.h.gch/'>$@

-include pch.d

$(OBJ):$(PCH)
$(PCH):
    g++ $(PCH_H)

clean:
    rm -f $(OBJ) $(PCH)

    瀹屾垚浠ヤ笂鍐呭鍚庯紝make clean,鍐嶉噸鏂扮紪璇戯紝鍒濇浼拌鍙渶瑕?鍒嗛挓錛侊紒  鏁存暣浼樺寲浜?-5鍊嶃?br>      



feixuwu 2011-03-19 16:39 鍙戣〃璇勮
]]>
瀹氭椂鍣ㄧ殑瀹炵幇http://m.shnenglu.com/feixuwu/archive/2011/03/13/141744.htmlfeixuwufeixuwuSun, 13 Mar 2011 14:06:00 GMThttp://m.shnenglu.com/feixuwu/archive/2011/03/13/141744.htmlhttp://m.shnenglu.com/feixuwu/comments/141744.htmlhttp://m.shnenglu.com/feixuwu/archive/2011/03/13/141744.html#Feedback0http://m.shnenglu.com/feixuwu/comments/commentRss/141744.htmlhttp://m.shnenglu.com/feixuwu/services/trackbacks/141744.html娌℃湁瀹氭椂鍣紝鎵鏈夐渶瑕佸畾鏃剁殑浠誨姟錛岄兘鍙兘娣誨姞綾諱技OnUpdate鐨勫嚱鏁幫紝鍦ㄤ富寰幆鐨勬椂鍊欐墽琛屻傚畾鏃墮渶姹傚皯鐨勬椂鍊欙紝鐪嬩笉鍑烘槑鏄劇殑闂錛屼絾鏄竴鏃﹁繖縐嶉渶姹傚浜嗭紝灝ゅ叾鏄緢澶氬唴閮ㄥ璞℃湁瀹氭椂闇姹傜殑鏃跺欙紝
榪欎釜闂灝辨瘮杈冩槑鏄句簡錛屽啓濂戒簡OnUpdate鍚庯紝榪樿寤虹珛涓鏉′粠涓誨驚鐜疢ainLoop鍒拌嚜韜玂nUpdate鐨勮皟鐢ㄩ摼銆?br> 
  浜嬩歡鍏跺疄灝辨槸涓涓箍鎾拰璁㈤槄鐨勫叧緋伙紝Delegate灝辨槸瀹炵幇榪欐牱涓濂楁満鍒剁殑鍒╁櫒錛岀洰鍓岲elegate鐨勫疄鐜頒富瑕佹湁2縐嶏紝涓縐嶆槸CodeProject涓婄殑涓涓狥astDelegate瀹炵幇錛屽彟澶栦竴涓瘮杈冨吀鍨嬬殑瀹炵幇灝辨槸boost鐨?br>瀹炵幇浜嗭紝鏃犺閲囧彇鍝瀹炵幇鏂規錛屽疄鐜伴毦搴﹂兘涓嶇畻澶ぇ銆?br>  Server褰撳墠妗嗘灦瀵瑰畾鏃跺櫒鏃犱換浣曟敮鎸侊紝鍙湁涓涓狣oMainLoop鐨勫嚱鏁板彲浠ユ淳鐢熸潵榪愯鑷繁鐨勫畾鏃墮昏緫銆?br>  鎴戝師鏉ラ兘鏄敤鐨凙CE灝佽鐨勭粍浠訛紝鐢ㄤ簡涓孌墊椂闂翠篃娌″彂鐜版槑鏄鵑棶棰橈紝涓嶈繃ACE鐨勫畾鏃跺櫒涓嶅お閫傚悎鍦ㄨ繖涓柊欏圭洰鐢紝涓昏鍘熷洜鏈夊涓嬪嚑鐐癸細
  1銆丄CE搴撳お澶т簡錛屼笉鎯充粎浠呬負浜嗗畾鏃跺櫒寮曞叆涓涓繖涔堝簽澶х殑搴撱?br>  2銆丄CE鐨勫畾鏃跺櫒闇瑕侀澶栧惎鍔ㄤ竴涓畾鏃跺櫒綰跨▼錛屽畾鏃朵換鍔℃槸鍦ㄥ畾鏃跺櫒綰跨▼璺戠殑錛岃屾垜浠殑欏圭洰閫昏緫鍏跺疄鏄湪鍗曚釜綰跨▼榪愯鐨勶紝濡傛灉鐩存帴閲囩敤ACE瀹氭椂鍣紝浼氱粰閫昏緫甯︽潵棰濆鐨勫鏉傚害銆傜敱浜庢暣涓昏緫綰跨▼鐨勬鏋舵槸鍏叡妯″潡錛屾墜澶翠篃娌℃湁浠g爜錛屾墍浠ュ皢瀹氭椂鍣ㄧ嚎紼嬬殑浠誨姟鍙戦佸埌涓婚昏緫綰跨▼榪愯涔熸槸涓嶅彲琛岀殑銆?br>  3銆丄CE鐨勫畾鏃跺櫒鏈夊緢澶氱錛孴IMER_QUEUE銆乀IMER_WHELL銆乀IMER_HEAP絳夛紝涓漢鎰熻榪欎簺瀹氭椂鍣ㄧ殑鎻掑叆銆佸彇娑堟搷浣滈兘姣旇緝鑰楁椂錛屽姞浠ユ敼瑁呮斁鍒頒富綰跨▼run鐨勫甫浠峰皢浼氬緢澶с?br>
鍏跺疄linux鍐呮牳灝辨湁涓涓瘮杈冮珮鎬ц兘鐨勫畾鏃跺櫒錛屼唬鐮佸湪kernel/Timer.c閲岋紝 2.6鍐呮牳鐨勫畾鏃跺櫒浠g爜鏇存槸綆媧併?br>linux鐨勫畾鏃朵換鍔¢兘鏄互jiffie 涓哄崟浣嶇殑錛宭inux灝嗘墍鏈夊畾鏃朵換鍔″垎涓?涓樁姊紝
struct tvec {
    struct list_head vec[TVN_SIZE];
};

struct tvec_root {
    struct list_head vec[TVR_SIZE];
};

struct tvec_base {
    spinlock_t lock;
    struct timer_list *running_timer;
    unsigned long timer_jiffies;
    struct tvec_root tv1;
    struct tvec tv2;
    struct tvec tv3;
    struct tvec tv4;
    struct tvec tv5;
} ____cacheline_aligned;

瀵逛竴涓柊鐨勫畾鏃朵換鍔★紝澶勭悊鏂規硶濡備笅:
static void internal_add_timer(struct tvec_base *base, struct timer_list *timer)
{
    unsigned long expires = timer->expires;
    unsigned long idx = expires - base->timer_jiffies;
    struct list_head *vec;

    if (idx < TVR_SIZE) {
        int i = expires & TVR_MASK;
        vec = base->tv1.vec + i;
    } else if (idx < 1 << (TVR_BITS + TVN_BITS)) {
        int i = (expires >> TVR_BITS) & TVN_MASK;
        vec = base->tv2.vec + i;
    } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) {
        int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK;
        vec = base->tv3.vec + i;
    } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) {
        int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK;
        vec = base->tv4.vec + i;
    } else if ((signed long) idx < 0) {
        /*
         * Can happen if you add a timer with expires == jiffies,
         * or you set a timer to go off in the past
         */
        vec = base->tv1.vec + (base->timer_jiffies & TVR_MASK);
    } else {
        int i;
        /* If the timeout is larger than 0xffffffff on 64-bit
         * architectures then we use the maximum timeout:
         */
        if (idx > 0xffffffffUL) {
            idx = 0xffffffffUL;
            expires = idx + base->timer_jiffies;
        }
        i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
        vec = base->tv5.vec + i;
    }
    /*
     * Timers are FIFO:
     */
    list_add_tail(&timer->entry, vec);
}
浠庝笂鍙互鐪嬪埌Linux瀵瑰畾鏃跺櫒鐨勫鐞嗭細瀵瑰嵆灝嗗湪TVR_SIZE 涓猨iffies鍐呭埌杈劇殑瀹氭椂浠誨姟錛屽皢瀹冩寕鍒扮涓緇則v1 涓嬶紝鍏蜂綋灝辨槸鎸傚埌expires & TVR_MASK 瀵瑰簲鐨勫垪琛ㄤ笂鍘匯?br>鍚屼竴涓猨iffies鍒拌揪鐨勫畾鏃跺櫒鏄寕鍦ㄥ悓涓涓摼琛ㄧ殑銆?br>鍚岀悊錛屾寕鍒扮浜屼釜緇勭殑鏄?鍒版湡鏃墮棿灝忎簬 1 << (TVR_BITS + TVN_BITS) jiffies鐨勩?br>鎸傚埌絎笁涓粍鐨勬槸 鍒版湡鏃墮棿灝忎簬1 << (TVR_BITS + 2 * TVN_BITS) jiffies鐨勩?br>鎸傚埌絎洓涓粍鐨勬槸 鍒版湡鏃墮棿灝忎簬 1 << (TVR_BITS + 3 * TVN_BITS) jiffies鐨勩?br>瓚呰繃1 << (TVR_BITS + 3 * TVN_BITS) 鐨勬寕鍒扮浜旂粍銆?br>榪欐牱錛屾墍鏈夊埌鏈熺殑浠誨姟閮戒細鍦ㄧ涓緇勩備換浣曟椂鍒婚兘鍙互鐩存帴閫氳繃褰撳墠jiffies&TVR_SIZE 鏉ユ壘鍒伴渶瑕佽繍琛岀殑瀹氭椂鍣ㄤ換鍔″垪琛紝瀹氭椂鍣ㄧ殑鎻掑叆鏁堢巼灝辨槸O(1)銆?br>
涓嬮潰鏄畾鏃跺櫒鐨勮繍琛屼唬鐮侊細
static int cascade(struct tvec_base *base, struct tvec *tv, int index)
{
    /* cascade all the timers from tv up one level */
    struct timer_list *timer, *tmp;
    struct list_head tv_list;

    list_replace_init(tv->vec + index, &tv_list);

    /*
     * We are removing _all_ timers from the list, so we
     * don't have to detach them individually.
     */
    list_for_each_entry_safe(timer, tmp, &tv_list, entry) {
        BUG_ON(tbase_get_base(timer->base) != base);
        internal_add_timer(base, timer);
    }

    return index;
}

#define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK)

/**
 * __run_timers - run all expired timers (if any) on this CPU.
 * @base: the timer vector to be processed.
 *
 * This function cascades all vectors and executes all expired timer
 * vectors.
 */
static inline void __run_timers(struct tvec_base *base)
{
    struct timer_list *timer;

    spin_lock_irq(&base->lock);
    while (time_after_eq(jiffies, base->timer_jiffies)) {
        struct list_head work_list;
        struct list_head *head = &work_list;
        int index = base->timer_jiffies & TVR_MASK;

        /*
         * Cascade timers:
         */
        if (!index &&
            (!cascade(base, &base->tv2, INDEX(0))) &&
                (!cascade(base, &base->tv3, INDEX(1))) &&
                    !cascade(base, &base->tv4, INDEX(2)))
            cascade(base, &base->tv5, INDEX(3));
        ++base->timer_jiffies;
        list_replace_init(base->tv1.vec + index, &work_list);
        while (!list_empty(head)) {
            void (*fn)(unsigned long);
            unsigned long data;

            timer = list_first_entry(head, struct timer_list,entry);
            fn = timer->function;
            data = timer->data;

            timer_stats_account_timer(timer);

            set_running_timer(base, timer);
            detach_timer(timer, 1);
            spin_unlock_irq(&base->lock);
            {
                int preempt_count = preempt_count();
                fn(data);
                if (preempt_count != preempt_count()) {
                    printk(KERN_ERR "huh, entered %p "
                           "with preempt_count %08x, exited"
                           " with %08x?\n",
                           fn, preempt_count,
                           preempt_count());
                    BUG();
                }
            }
            spin_lock_irq(&base->lock);
        }
    }
    set_running_timer(base, NULL);
    spin_unlock_irq(&base->lock);
}
褰撶涓緇勮繍琛屽畬涓杞悗錛岄渶瑕佸皢tv2鐨勪竴緇勬柊鐨勫畾鏃朵換鍔″姞鍒扮涓緇勩傝繖灝卞ソ姣旀椂閽熺殑鎸囬拡錛岀閽堣繍琛屼竴鍦堝悗錛屽垎閽堟榪涗竴鏍鹼紝鍚庣畫鐨勮皟鏁撮兘鏄被浼箋?
cascade 灝辨槸璐熻矗灝嗕笅涓緇勭殑瀹氭椂浠誨姟娣誨姞鍒板墠闈㈢殑浠誨姟闃舵銆傚彧鏈夊綋絎竴杞殑瀹氭椂浠誨姟鍏ㄩ儴榪愯瀹屾瘯鍚庯紝鎵嶄細闇瑕佷粠絎簩杞皟鍏ユ柊鐨勪換鍔★紝鍙湁絎簩綰у埆鐨勪換鍔¢兘璋冨叆瀹屾瘯鍚庯紝鎵嶉渶瑕佷粠絎笁杞殑瀹氭椂浠誨姟璋冨叆鏂扮殑浠誨姟錛?br> if (!index &&
            (!cascade(base, &base->tv2, INDEX(0))) &&
                (!cascade(base, &base->tv3, INDEX(1))) &&
                    !cascade(base, &base->tv4, INDEX(2)))
            cascade(base, &base->tv5, INDEX(3));

榪欏氨鏄礋璐h皟鏁寸殑浠g爜錛岀浉褰撶殑綆媧併?br>鍙傜収涓婅堪浠g爜瀹炵幇涓涓畾鏃跺櫒鍚庯紝鍔犲叆4000涓畾鏃朵換鍔★細
    for(int i = 1; i < 4000; i++)
    {
        g_TimerHandle[i] = g_timerManager.setTimer(&tmpSink1, i, i*10, "ss");
    }
浠?0姣鍒?000*10姣,榪愯鍚庯紝嫻嬭瘯涓嬫ц兘錛?br>鍑芥暟鍚?nbsp;                                   鎵ц嬈℃暟    鏈灝忔椂闂?nbsp;    騫沖潎鏃墮棿       鏈澶ф椂闂?br>TimerManager::runTimer    2170566        10              10               3046   
鍙互鐪嬪埌錛岄櫎浜嗕釜鍒椂闂存槸鍥犱負綰跨▼鍒囨崲瀵艱嚧鏁版嵁姣旇緝澶у,騫沖潎姣忔榪愯runTimer鐨勬椂闂存槸10寰銆?br>榪欎釜鏃墮棿榪樺寘鎷瘡涓畾鏃跺櫒鐨勬墽琛屾秷鑰楋紝鏁堢巼榪樻槸涓嶉敊鐨勩?br>

feixuwu 2011-03-13 22:06 鍙戣〃璇勮
]]>
Ogre鍒濅綋楠?/title><link>http://m.shnenglu.com/feixuwu/archive/2010/09/25/127669.html</link><dc:creator>feixuwu</dc:creator><author>feixuwu</author><pubDate>Sat, 25 Sep 2010 13:44:00 GMT</pubDate><guid>http://m.shnenglu.com/feixuwu/archive/2010/09/25/127669.html</guid><wfw:comment>http://m.shnenglu.com/feixuwu/comments/127669.html</wfw:comment><comments>http://m.shnenglu.com/feixuwu/archive/2010/09/25/127669.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/feixuwu/comments/commentRss/127669.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/feixuwu/services/trackbacks/127669.html</trackback:ping><description><![CDATA[  鏈榪戞父鎴忓張瑕佸皝嫻嬩簡錛屽伐浣滄瘮杈冪揣寮狅紝鏅氫笂涓嬬彮浜嗘瘮杈冪瘡錛屽洖瀹舵噿寰楀啓浠g爜浜嗭紝涓嶈繃欏轟究鍊掓槸緇х畫瀹屾垚浜嗗 鏂板墤渚犳儏緙橈紙鍜屾湀褰變紶璇寸殑璧勬簮鏍煎紡鐩稿悓錛夌殑璧勬簮閫嗗悜銆傚畬鎴愪簡璧勬簮閫嗗悜鍚庯紝紿佺劧鍏磋嚧鏉ヤ簡錛屽啓浜嗕釜綆鍗曠殑鍦板浘鏌ョ湅鍣紝鍒扮洰鍓嶄負姝紝涓鍒囪繍琛屾甯搞傚悗鏉ュ仛浜嗕釜綆鍗曠殑Demo錛屽疄鐜頒簡鍩烘湰鐨勫璺拰鎶鑳藉姩鐢繪挱鏀撅紝鍏跺疄鏂板墤渚犳儏緙樺師鏈殑鎶鑳芥晥鏋滀互浠婂ぉ鐨勭溂鍏夌湅璧鋒潵涔熻繕鍙互錛屽嵆渚垮姝わ紝鎴戣繕鏄泦鎴愪簡hge鐨勭矑瀛愮郴緇熻繘鍘伙紝璇曚簡涓嬫晥鏋滐紝榪樻槸鎸哄鎬殑銆?br>鍋氬畬浜嗚繖浜涗箣鍚庯紝鏈兂涓烘垜鐨凱SP灞卞涓涓柊鍓戜緺鎯呯紭銆備笉鏂欏悗鏉ヨ繛緇姞浜嗗ソ鍑犲ぉ鐝紝鍔犱簡鍑犲ぉ鐝箣鍚庯紝浜轟篃鎳掍簡錛屽北瀵ㄦ父鎴忕殑浜嬫儏涔熷氨鏃犵柧鑰岀粓浜嗐?br>鍓嶉潰鍐欒繃鍑犵瘒閫嗗悜宸ョ▼鐨勬枃绔狅紝鍓嶅嚑澶╃炕鍑烘潵鐪嬩簡涓嬶紝鎰熻鍍忔槸鍙︿竴涓漢鍐欑殑澶╀功錛屾垜鑷繁鐪嬭嚜宸辯殑鏂囩珷灝氫笖濡傛錛屽埆浜哄氨鏇翠笉鐢ㄨ浜嗭紝鍏跺疄瀵瑰ぇ閮ㄥ垎浜鴻岃█錛屽叧蹇冪殑鍙槸閫嗗悜鐨勬垚鏋溿傚鏂板墤渚犳儏緙樼殑璧勬簮鍜岀浉鍏蟲覆鏌撴劅鍏磋叮鐨勬湅鍙嬪彲浠ュ崟鐙珽mail鎴戙?<br>  寮濮嬮槄璇籓gre浠g爜姝f槸鍦ㄨ繖鐧炬棤鑱婅禆鐨勭姸鎬佷笅寮濮嬬殑錛孫gre鎺ㄥ嚭鏉ュ緢澶氬勾浜嗭紝璨屼技05騫村氨鍚鏈嬪弸璇磋搗榪囪繖涓」鐩紝涓嶈繃鎴戜竴鍚戞槸涓撴敞鏈嶅姟绔紑鍙戯紝瀵瑰鎴風寮鍙戠粡楠屼笉鏄緢澶氾紝鍦?D棰嗗煙灝卞畬鍏ㄦ槸鐨勬柊鎵嬩簡錛屾墍浠ヤ竴鐩翠篃娌′粩緇嗙爺絀躲傝繖鍑犲ぉ鎷胯搗鍘熸潵涓嬭澆鐨勪竴涓増鏈紝綆鍗曡浜嗕笅浠g爜銆?br>Ogre鐨勭粨鏋勮繕鏄緢娓呮櫚鐨勶紝鍜屾墜鍐屼笂璇寸殑涓鏍鳳紝涓昏灝辨槸閭e嚑涓璞★紝Demo澶ч儴鍒嗕篃寰堢畝鍗曪紝浠g爜閲忎笉澶氾紝鐪嬭搗鏉ュ緢鎸浜哄績銆?br>浣嗘槸瀵規垜榪欐牱鐨勬柊鎵嬫潵璇達紝棣栧厛鎯充簡瑙g殑褰撶劧鏄覆鏌撴祦紼嬨?Ogre鐨勬覆鏌撴祦紼嬬‘瀹炰細璁?D鏂版墜涓嶉傚簲錛屽畠鏄粠RenderTarget寮濮嬬殑錛屼竴涓猂enderTarget鍙互鏈夊嚑涓猇iewPort錛屾瘡涓猇iewPort閮芥湁涓涓嫭绔嬬殑鎽勫儚鏈猴紝榪欏彲浠ュ疄鐜板悓灞忓箷澶氫釜娓叉煋銆?br>閫氳繃ViewPort瀵硅薄鐨剈pdate璋冪敤<br> mCamera->_renderScene(this, mShowOverlays); <br>鏉ユ墽琛屽満鏅覆鏌擄紝鑰屽満鏅覆鏌撻噷錛屾渶閲嶈鐨勮綆梍findVisibleObjects浜嗭紝<br>榪欎釜鍑芥暟灝嗗彲瑙佺殑鐗╀綋娣誨姞鍒版覆鏌撻槦鍒楅噷錛岃繖涓嚱鏁伴潪甯哥殑緇曪紝閲岄潰榪樼敤鍒頒簡Vistor,綺劇涓嶅ソ瀹規槗琚粫鏅曪紝濂藉湪鎴戞尯浣忎簡錛岀啲榪囨潵浜嗐?br>鐔熸倝浜嗗ぇ鑷寸殑娓叉煋嫻佺▼鍚庯紝鎴戣寰楄鍐欑偣涓滆タ鏉ュ疄鎴樹簡銆?br>3D鏁欑▼鐨勫紑濮嬩竴鑸細鏁欏ぇ瀹剁敾涓夎褰紝鎵浠ユ垜涔熸兂鐢∣gre鐢諱釜涓夎褰㈢帺鐜╋紝<br>涓寮濮嬶紝鎴戜篃鎯充粠鍍忛偅浜汥emo涓鏍蜂粠ExampleApplication緇ф壙錛屼笉榪囨垜鍙戠幇榪欐牱鍚姩澶參浜嗭紝鑰屼笖鎴戜笉闇瑕佸姞杞介偅涔堝鐨勬潗璐紝<br>鎵浠ヨ嚜宸辨墜鍔–onfigure浜嗭紝浠g爜濡備笅:<br>Ogre::LogManager* pLogManager = new Ogre::LogManager;<br>    Ogre::Log* pLog = pLogManager->createLog("ogreLearn1.log");<br>    pLog->setDebugOutputEnabled(true);<br><br>    Ogre::Root* pRootObject = new Ogre::Root;<br>    pRootObject->loadPlugin("RenderSystem_Direct3D9_d.dll");<br>    pRootObject->loadPlugin("Plugin_OctreeSceneManager_d.dll");<br>    <br>    Ogre::RenderSystem* pRenderSystem = pRootObject->getRenderSystemByName("Direct3D9 Rendering Subsystem");<br>    pRenderSystem->setConfigOption("Full Screen", "False");<br>    pRootObject->setRenderSystem(pRenderSystem);    <br>    Ogre::RenderWindow* pRenderWindow = pRootObject->initialise(true); <br><br>緙栬瘧嫻嬭瘯浜嗕笅錛屽彲浠ユ甯歌繍琛岋紝涓嶈繃鍙戠幇灞忓箷鏄姳鐨勶紝鎴戣繕娌℃湁鍒涘緩鍦烘櫙鍛紝緇х畫娣誨姞鎽勫儚鏈哄拰ViewPort浠ュ強鍦烘櫙<br>// 鍒涘緩鍦烘櫙鍜屾憚鍍忔満浠ュ強ViewPort<br>    Ogre::SceneManager* pSceneManager = pRootObject->createSceneManager(Ogre::ST_GENERIC, "OgreLearn1");<br>    Ogre::Camera* pCamera = pSceneManager->createCamera("MainCamara");<br>    pCamera->setPosition(0.0, 0.0, -20.0);<br>    pCamera->lookAt(0, 0, 0);<br>    pCamera->setNearClipDistance(2);<br><br>    Ogre::Viewport* pViewPort = pRenderWindow->addViewport(pCamera);<br>    pViewPort->setBackgroundColour(Ogre::ColourValue(0, 0, 0, 1.0f) );<br>    pCamera->setAspectRatio(pViewPort->getActualWidth()/pViewPort->getActualHeight() ); <br><br>鏈鍚庡姞涓妏RootObject->startRendering(); <br> 緙栬瘧榪愯錛屼竴鍒囨甯革紝灞忓箷棰滆壊涔熷彉鎴愪簡鎯寵鐨勯粦鑹詫紝鎭╋紝涓嬩竴姝ヨ娣誨姞涓夎褰簡錛屾垜涓嶅お鍠滄鐢∣greManualObject錛屼竴鍫嗙殑綣佺悙鎿嶄綔銆傝繖閲岀敤鑷畾涔夌殑Mesh鏉ョ粯鍒?瑙掑艦銆?br>pSceneManager->setAmbientLight(Ogre::ColourValue(0.2, 0.2, 0.2) );<br>        Ogre::MeshPtr pMeshData = Ogre::MeshManager::getSingleton().createManual("Learn", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);<br>        Ogre::SubMesh* pSubMesh = pMeshData->createSubMesh();<br>        pSubMesh->useSharedVertices = false;<br>        pSubMesh->vertexData = new Ogre::VertexData;<br>        pSubMesh->vertexData->vertexStart = 0;<br>        pSubMesh->vertexData->vertexCount = 3;<br><br> 鍏堣緗簡鐜鍏?鍏跺疄娌″暐鐢紝鎴戝悗闈細紱佹)錛岀劧鍚庡垱寤轟簡涓涓嚜瀹氫箟鐨凪esh,<br>绱ф帴鐫鐨勬槸鍒涘緩涓涓猄ubMesh錛岃鐭ラ亾Ogre涓渶灝忕殑緗戞牸灝辨槸SubMesh,鍒涘緩濂絊ubMesh鍚庯紝瑕佸~鍏呯綉鏍肩粨鏋勪簡錛?br>鍒涘緩浜嗕竴涓猇ertexData,璁劇疆欏剁偣鏁扮洰涓?錛堜篃灝辨槸涓涓笁瑙掑艦錛夛紝涓嬮潰璇ュ畾涔夐《鐐規牸寮忎簡錛?br>Ogre::VertexDeclaration* pDecle = pSubMesh->vertexData->vertexDeclaration;<br>        size_t sOffset = 0;<br>        pDecle->addElement(0, sOffset, Ogre::VET_FLOAT3, Ogre::VES_POSITION);<br>        sOffset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT3);<br>        pDecle->addElement(0, sOffset, Ogre::VET_COLOUR, Ogre::VES_DIFFUSE);<br>        sOffset += Ogre::VertexElement::getTypeSize(Ogre::VET_COLOUR); <br><br>涓婅堪浠g爜瀹氫箟浜嗛《鐐規牸寮忥紝鍙湁鍩烘湰鐨勫潗鏍囧拰棰滆壊銆?br>涓嬩竴姝ュ皢鏄敵璇鋒樉瀛橈紝濉厖欏剁偣緇撴瀯銆?br>Ogre::HardwareVertexBufferSharedPtr vBuf = Ogre::HardwareBufferManager::getSingleton().createVertexBuffer(sOffset, 3, Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY);<br>        float* pReal = static_cast<float*>(vBuf->lock(Ogre::HardwareBuffer::HBL_DISCARD));<br>        Ogre::RGBA* pColor = NULL;<br><br>        *pReal++ = -2.0f;<br>        *pReal++ = 0.0f;<br>        *pReal++ = 0.0f;<br>        pColor = (Ogre::RGBA*)pReal;<br>        pRenderSystem->convertColourValue(Ogre::ColourValue(1.0f, 0.0, 0, 0.0f), pColor);<br>        pReal = (float*)(pColor+1);<br>        <br>        *pReal++ = 0.0f;<br>        *pReal++ = 2.0f;<br>        *pReal++ = 0.0f;<br>        pColor = (Ogre::RGBA*)pReal;<br>        pRenderSystem->convertColourValue(Ogre::ColourValue(0.0f, 0, 1.0, 1.0f), pColor);<br>        pReal = (float*)(pColor+1);<br><br><br>        *pReal++ = 2.0f;<br>        *pReal++ = 0.0f;<br>        *pReal++ = 0.0f;<br>        pColor = (Ogre::RGBA*)pReal;<br>        pRenderSystem->convertColourValue(Ogre::ColourValue(1.0f, 0, 0, 1.0f), pColor);<br>        pReal = (float*)(pColor+1);<br>        vBuf->unlock();<br>        pSubMesh->vertexData->vertexBufferBinding->setBinding(0, vBuf);<br>        <br>        pMeshData->load();<br>        pMeshData->_setBounds(Ogre::AxisAlignedBox(-2, 0, -1, 2, 2, 1) ); <br>濉厖欏剁偣鍚庯紝璁劇疆緗戞牸鍖呭洿鐩掞紝榪欐牱涓涓嚜瀹氫箟鐨勭綉鏍煎氨鍒涘緩濂戒簡錛屾帴涓嬫潵瑕佸垱寤轟竴涓嬌鐢ㄨ緗戞牸鐨勫疄浣撲簡<br>    Ogre::Entity* pEntity = pSceneManager->createEntity("TestEntity", "Learn");<br>        pEntity->setMaterialName("BaseWhiteNoLighting");<br><br>        pSceneManager->getRootSceneNode()->createChildSceneNode()->attachObject(pEntity);<br>        pEntity->getParentNode()->setPosition(3, 0, 0);<br>        pEntity->getParentNode()->rotate(Ogre::Quaternion(1.0f, 1.0f, 0, 1.0f) ); <br><br>濂戒簡錛岃繖鏍峰疄浣撲篃鍒涘緩濂戒簡錛屾帴涓嬫潵鎵ц娓叉煋鍚э細<br>pRootObject->startRendering(); <br><br> <h2>閬囧埌鐨勯棶棰?/h2>   涓婅堪浠g爜鏄繍琛屾甯哥殑錛屼絾鏄竴寮濮嬶紝鎴戞墽琛岀殑緇撴灉鏄湅涓嶅埌浠諱綍涓滆タ錛岃窡韙簡涓嬶紝鍙戠幇瀹炰綋姣忔閮借鎽勫儚鏈鴻鍓簡錛屾墠鍙戣鑷畾涔塎esh瑕佽嚜宸辮緗寘鍥寸洅瀛愶紝<br>璁劇疆鍙寘鍥寸洅瀛愩?br> 璁劇疆浜嗗寘鍥寸洅鍚庯紝鏁版嵁宸茬粡榪涘叆浜咲3D鐨勬覆鏌撶閬擄紝浣嗘槸榪樻槸娌$湅鍒頒笁瑙掑艦錛屼粩緇嗚瀵燂紝鍘熸潵鎽勫儚鏈哄鐫鐨勬槸涓夎褰㈢殑鑳岄潰銆傘傘?br>璋冩暣鎽勫儚鏈哄悗錛岀粓浜庤兘鐪嬪埌涓涓笁瑙掑艦浜嗭紝涓嶈繃鏄櫧鑹茬殑銆傘傘?br>浠庤繖涓棁鐘剁湅錛屽簲璇ユ槸娌℃湁鍏抽棴鍏夌収瀵艱嚧鐨勶紝浣嗘槸鎴戞槑鏄庝富鍔ㄨ皟鐢≧enderSystem鍏抽棴鍏夌収浜嗗晩錛屼粩緇嗚窡韙簡涓嬪師鏉ユ槸鏉愯川鍦ㄦ崳涔憋紝<br>榛樿鐨勬潗璐ㄦ槸寮鍚簡鍏夌収鐨勶紝鎵浠ュ湪娓叉煋鍓嶇殑SceneManager::_setPass 鐨勬椂鍊欙紝寮鍚簡鍏夌収銆?br>榪欏ソ鍔烇紝涓誨姩璁劇疆浜嗗叧闂厜鐓х殑鏉愯川"BaseWhiteNoLighting" 鍚庯紝緇堜簬鐪嬪埌浜嗗僵鑹蹭笁瑙掑艦浜嗐?br><br><br> <img src ="http://m.shnenglu.com/feixuwu/aggbug/127669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/feixuwu/" target="_blank">feixuwu</a> 2010-09-25 21:44 <a href="http://m.shnenglu.com/feixuwu/archive/2010/09/25/127669.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>select 鍜?epollhttp://m.shnenglu.com/feixuwu/archive/2010/07/10/119995.htmlfeixuwufeixuwuSat, 10 Jul 2010 10:40:00 GMThttp://m.shnenglu.com/feixuwu/archive/2010/07/10/119995.htmlhttp://m.shnenglu.com/feixuwu/comments/119995.htmlhttp://m.shnenglu.com/feixuwu/archive/2010/07/10/119995.html#Feedback1http://m.shnenglu.com/feixuwu/comments/commentRss/119995.htmlhttp://m.shnenglu.com/feixuwu/services/trackbacks/119995.html浠婂ぉ闂叉潵鏃犱簨錛岀炕鐪嬩簡涓嬪唴鏍鎬唬鐮侊紝緇撳悎鍐呮牳浠g爜鍜屽ぇ瀹跺垎浜笅鎴戠殑瑙傜偣銆?br>

涓銆佽繛鎺ユ暟

鎴戞湰浜轟篃鏇劇粡鍦ㄩ」鐩腑鐢ㄨ繃select鍜宔poll,瀵逛簬select錛屾劅瑙︽渶娣辯殑鏄痩inux涓媠elect鏈澶ф暟鐩檺鍒?windows 涓嬩技涔庢病鏈夐檺鍒?錛屾瘡涓繘紼嬬殑select鏈澶氳兘澶勭悊FD_SETSIZE涓狥D(鏂囦歡鍙ユ焺)錛?br>濡傛灉瑕佸鐞嗚秴榪?024涓彞鏌勶紝鍙兘閲囩敤澶氳繘紼嬩簡銆?br>甯歌鐨勪嬌鐢╯lect鐨勫榪涚▼妯″瀷鏄繖鏍風殑錛?涓涓繘紼嬩笓闂╝ccept錛屾垚鍔熷悗灝唂d閫氳繃unix socket浼犻掔粰瀛愯繘紼嬪鐞嗭紝鐖惰繘紼嬪彲浠ユ牴鎹瓙榪涚▼璐熻澆鍒嗘淳銆傛浘緇忕敤榪?涓埗榪涚▼+4涓瓙榪涚▼ 鎵胯澆浜嗚秴榪?000涓殑璐熻澆銆?br>榪欑妯″瀷鍦ㄦ垜浠綋鏃剁殑涓氬姟榪愯鐨勯潪甯稿ソ銆俥poll鍦ㄨ繛鎺ユ暟鏂歸潰娌℃湁闄愬埗錛屽綋鐒跺彲鑳介渶瑕佺敤鎴瘋皟鐢ˋPI閲嶇幇璁劇疆榪涚▼鐨勮祫婧愰檺鍒躲?br>

浜屻両O宸埆

1銆乻elect鐨勫疄鐜?/h2> 榪欐鍙互緇撳悎linux鍐呮牳浠g爜鎻忚堪浜嗭紝鎴戜嬌鐢ㄧ殑鏄?.6.28錛屽叾浠?.6鐨勪唬鐮佸簲璇ュ樊涓嶅鍚с?br>鍏堢湅鐪媠elect:
select緋葷粺璋冪敤鐨勪唬鐮佸湪fs/Select.c涓嬶紝
asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
            fd_set __user *exp, struct timeval __user *tvp)
{
    struct timespec end_time, *to = NULL;
    struct timeval tv;
    int ret;

    if (tvp) {
        if (copy_from_user(&tv, tvp, sizeof(tv)))
            return -EFAULT;

        to = &end_time;
        if (poll_select_set_timeout(to,
                tv.tv_sec + (tv.tv_usec / USEC_PER_SEC),
                (tv.tv_usec % USEC_PER_SEC) * NSEC_PER_USEC))
            return -EINVAL;
    }

    ret = core_sys_select(n, inp, outp, exp, to);
    ret = poll_select_copy_remaining(&end_time, tvp, 1, ret);

    return ret;
}
鍓嶉潰鏄粠鐢ㄦ埛鎺т歡鎷瘋礉鍚勪釜fd_set鍒板唴鏍哥┖闂達紝鎺ヤ笅鏉ョ殑鍏蜂綋宸ヤ綔鍦╟ore_sys_select涓紝
core_sys_select->do_select,鐪熸鐨勬牳蹇冨唴瀹瑰湪do_select閲岋細
int do_select(int n, fd_set_bits *fds, struct timespec *end_time)
{
    ktime_t expire, *to = NULL;
    struct poll_wqueues table;
    poll_table *wait;
    int retval, i, timed_out = 0;
    unsigned long slack = 0;

    rcu_read_lock();
    retval = max_select_fd(n, fds);
    rcu_read_unlock();

    if (retval < 0)
        return retval;
    n = retval;

    poll_initwait(&table);
    wait = &table.pt;
    if (end_time && !end_time->tv_sec && !end_time->tv_nsec) {
        wait = NULL;
        timed_out = 1;
    }

    if (end_time && !timed_out)
        slack = estimate_accuracy(end_time);

    retval = 0;
    for (;;) {
        unsigned long *rinp, *routp, *rexp, *inp, *outp, *exp;

        set_current_state(TASK_INTERRUPTIBLE);

        inp = fds->in; outp = fds->out; exp = fds->ex;
        rinp = fds->res_in; routp = fds->res_out; rexp = fds->res_ex;

        for (i = 0; i < n; ++rinp, ++routp, ++rexp) {
            unsigned long in, out, ex, all_bits, bit = 1, mask, j;
            unsigned long res_in = 0, res_out = 0, res_ex = 0;
            const struct file_operations *f_op = NULL;
            struct file *file = NULL;

            in = *inp++; out = *outp++; ex = *exp++;
            all_bits = in | out | ex;
            if (all_bits == 0) {
                i += __NFDBITS;
                continue;
            }

            for (j = 0; j < __NFDBITS; ++j, ++i, bit <<= 1) {
                int fput_needed;
                if (i >= n)
                    break;
                if (!(bit & all_bits))
                    continue;
                file = fget_light(i, &fput_needed);
                if (file) {
                    f_op = file->f_op;
                    mask = DEFAULT_POLLMASK;
                    if (f_op && f_op->poll)
                        mask = (*f_op->poll)(file, retval ? NULL : wait);
                    fput_light(file, fput_needed);
                    if ((mask & POLLIN_SET) && (in & bit)) {
                        res_in |= bit;
                        retval++;
                    }
                    if ((mask & POLLOUT_SET) && (out & bit)) {
                        res_out |= bit;
                        retval++;
                    }
                    if ((mask & POLLEX_SET) && (ex & bit)) {
                        res_ex |= bit;
                        retval++;
                    }
                }
            }
            if (res_in)
                *rinp = res_in;
            if (res_out)
                *routp = res_out;
            if (res_ex)
                *rexp = res_ex;
            cond_resched();
        }
        wait = NULL;
        if (retval || timed_out || signal_pending(current))
            break;
        if (table.error) {
            retval = table.error;
            break;
        }

        /*
         * If this is the first loop and we have a timeout
         * given, then we convert to ktime_t and set the to
         * pointer to the expiry value.
         */
        if (end_time && !to) {
            expire = timespec_to_ktime(*end_time);
            to = &expire;
        }

        if (!schedule_hrtimeout_range(to, slack, HRTIMER_MODE_ABS))
            timed_out = 1;
    }
    __set_current_state(TASK_RUNNING);

    poll_freewait(&table);

    return retval;
}
涓婇潰鐨勪唬鐮佸緢澶氾紝鍏跺疄鐪熸鍏抽敭鐨勪唬鐮佹槸榪欎竴鍙?
mask = (*f_op->poll)(file, retval ? NULL : wait);
榪欎釜鏄皟鐢ㄦ枃浠剁郴緇熺殑 poll鍑芥暟錛屼笉鍚岀殑鏂囦歡緋葷粺poll鍑芥暟鑷劧涓嶅悓錛岀敱浜庢垜浠繖閲屽叧娉ㄧ殑鏄痶cp榪炴帴錛岃宻ocketfs鐨勬敞鍐屽湪 net/Socket.c閲屻?br>register_filesystem(&sock_fs_type);
socket鏂囦歡緋葷粺鐨勫嚱鏁頒篃鏄湪net/Socket.c閲岋細
static const struct file_operations socket_file_ops = {
    .owner =    THIS_MODULE,
    .llseek =    no_llseek,
    .aio_read =    sock_aio_read,
    .aio_write =    sock_aio_write,
    .poll =        sock_poll,
    .unlocked_ioctl = sock_ioctl,
#ifdef CONFIG_COMPAT
    .compat_ioctl = compat_sock_ioctl,
#endif
    .mmap =        sock_mmap,
    .open =        sock_no_open,    /* special open code to disallow open via /proc */
    .release =    sock_close,
    .fasync =    sock_fasync,
    .sendpage =    sock_sendpage,
    .splice_write = generic_splice_sendpage,
    .splice_read =    sock_splice_read,
};
浠巗ock_poll璺熼殢涓嬪幓錛?br>鏈鍚庡彲浠ュ埌 net/ipv4/tcp.c鐨?br>unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
榪欎釜鏄渶緇堢殑鏌ヨ鍑芥暟錛?br>涔熷氨鏄select 鐨勬牳蹇冨姛鑳芥槸璋冪敤tcp鏂囦歡緋葷粺鐨刾oll鍑芥暟錛屼笉鍋滅殑鏌ヨ錛屽鏋滄病鏈夋兂瑕佺殑鏁版嵁錛屼富鍔ㄦ墽琛屼竴嬈¤皟搴︼紙闃叉涓鐩村崰鐢╟pu錛夛紝鐩村埌鏈変竴涓繛鎺ユ湁鎯寵鐨勬秷鎭負姝€?br>浠庤繖閲屽彲浠ョ湅鍑簊elect鐨勬墽琛屾柟寮忓熀鏈氨鏄笉鍚岀殑璋冪敤poll,鐩村埌鏈夐渶瑕佺殑娑堟伅涓烘錛屽鏋渟elect 澶勭悊鐨剆ocket寰堝錛岃繖鍏跺疄瀵規暣涓満鍣ㄧ殑鎬ц兘涔熸槸涓涓秷鑰椼?br>

2銆乪poll鐨勫疄鐜?/h2> epoll鐨勫疄鐜頒唬鐮佸湪 fs/EventPoll.c涓嬶紝
鐢變簬epoll娑夊強鍒板嚑涓郴緇熻皟鐢紝榪欓噷涓嶉愪釜鍒嗘瀽浜嗭紝浠呬粎鍒嗘瀽鍑犱釜鍏抽敭鐐癸紝
絎竴涓叧閿偣鍦?br>static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
             struct file *tfile, int fd)
榪欐槸鍦ㄦ垜浠皟鐢╯ys_epoll_ctl 娣誨姞涓涓綆$悊socket鐨勬椂鍊欒皟鐢ㄧ殑鍑芥暟錛屽叧閿殑鍑犺濡備笅錛?br>epq.epi = epi;
    init_poll_funcptr(&epq.pt, ep_ptable_queue_proc);

    /*
     * Attach the item to the poll hooks and get current event bits.
     * We can safely use the file* here because its usage count has
     * been increased by the caller of this function. Note that after
     * this operation completes, the poll callback can start hitting
     * the new item.
     */
    revents = tfile->f_op->poll(tfile, &epq.pt);
榪欓噷涔熸槸璋冪敤鏂囦歡緋葷粺鐨刾oll鍑芥暟錛屼笉榪囪繖嬈″垵濮嬪寲浜嗕竴涓粨鏋勶紝榪欎釜緇撴瀯浼氬甫鏈変竴涓猵oll鍑芥暟鐨刢allback鍑芥暟錛歟p_ptable_queue_proc錛?br>鍦ㄨ皟鐢╬oll鍑芥暟鐨勬椂鍊欙紝浼氭墽琛岃繖涓猚allback錛岃繖涓猚allback鐨勫姛鑳藉氨鏄皢褰撳墠榪涚▼娣誨姞鍒?socket鐨勭瓑寰呰繘紼嬩笂銆?br>static void ep_ptable_queue_proc(struct file *file, wait_queue_head_t *whead,
                 poll_table *pt)
{
    struct epitem *epi = ep_item_from_epqueue(pt);
    struct eppoll_entry *pwq;

    if (epi->nwait >= 0 && (pwq = kmem_cache_alloc(pwq_cache, GFP_KERNEL))) {
        init_waitqueue_func_entry(&pwq->wait, ep_poll_callback);
        pwq->whead = whead;
        pwq->base = epi;
        add_wait_queue(whead, &pwq->wait);
        list_add_tail(&pwq->llink, &epi->pwqlist);
        epi->nwait++;
    } else {
        /* We have to signal that an error occurred */
        epi->nwait = -1;
    }

娉ㄦ剰鍒板弬鏁?whead 瀹為檯涓婃槸 sk->sleep錛屽叾瀹炲氨鏄皢褰撳墠榪涚▼娣誨姞鍒皊k鐨勭瓑寰呴槦鍒楅噷錛屽綋璇ocket鏀跺埌鏁版嵁鎴栬呭叾浠栦簨浠惰Е鍙戞椂錛屼細璋冪敤
sock_def_readable 鎴栬卻ock_def_write_space 閫氱煡鍑芥暟鏉ュ敜閱掔瓑寰呰繘紼嬶紝榪?涓嚱鏁伴兘鏄湪socket鍒涘緩鐨勬椂鍊欏~鍏呭湪sk緇撴瀯閲岀殑銆?br>浠庡墠闈㈢殑鍒嗘瀽鏉ョ湅錛宔poll紜疄鏄瘮select鑱槑鐨勫銆佽交鏉劇殑澶氾紝涓嶇敤鍐嶈嫤鍝堝搱鐨勫幓杞浜嗐?br>


feixuwu 2010-07-10 18:40 鍙戣〃璇勮
]]>鎺ㄨ崘涓涓法騫沖彴鍐呭瓨鍒嗛厤鍣?/title><link>http://m.shnenglu.com/feixuwu/archive/2010/07/10/119980.html</link><dc:creator>feixuwu</dc:creator><author>feixuwu</author><pubDate>Sat, 10 Jul 2010 09:32:00 GMT</pubDate><guid>http://m.shnenglu.com/feixuwu/archive/2010/07/10/119980.html</guid><wfw:comment>http://m.shnenglu.com/feixuwu/comments/119980.html</wfw:comment><comments>http://m.shnenglu.com/feixuwu/archive/2010/07/10/119980.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://m.shnenglu.com/feixuwu/comments/commentRss/119980.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/feixuwu/services/trackbacks/119980.html</trackback:ping><description><![CDATA[  鏄ㄥぉ涓涓悓浜嬩竴澶ф棭鍦ㄧ兢閲屾帹鑽愪簡涓涓猤oogle project涓婄殑寮婧愬唴瀛樺垎閰嶅櫒錛?a swaped="true" target="_blank">http://code.google.com/p/google-perftools/</a>錛夛紝鎹google鐨勫緢澶氫駭鍝侀兘鐢ㄥ埌浜嗚繖涓唴瀛樺垎閰嶅簱錛岃屼笖緇忎粬嫻嬭瘯錛屾垜浠殑娓告垙瀹㈡埛绔泦鎴愪簡榪欎釜鏈鏂板唴瀛樺垎閰嶅櫒鍚庯紝FPS瓚寵凍鎻愰珮浜嗗皢榪?0甯у乏鍙籌紝榪欏彲鏄釜浜嗕笉璧風殑鎻愬崌錛岃鐭ラ亾3D緇勭殑鍏勫紵蹇欎簡鍑犲懆涔熸病瑙佽繖涔堝ぇ鐨勬ц兘鎻愬崌銆?br><br>濡傛灉鎴戜滑鑷繁鏈韓鐢ㄧ殑crt鎻愪緵鐨勫唴瀛樺垎閰嶅櫒錛岃繖涓彁鍗囦篃綆椾笉寰椾粈涔堛傞棶棰樻槸鎴戜滑鍐呴儴緋葷粺鏄湁涓涓皬鍐呭瓨綆$悊鍣ㄧ殑錛屼竴鑸潵璇村皬鍐呭瓨鍒嗛厤鐨勭畻娉曢兘澶у悓灝忓紓錛岀幇鎴愮殑瀹炵幇涔熷緢澶氾紝姣斿linux鍐呮牳鐨剆lab銆丼GI STL鐨勫垎閰嶅櫒銆乷gre鑷甫鐨勫唴瀛樺垎閰嶅櫒錛屾垜浠嚜宸辯殑鍐呭瓨鍒嗛厤鍣ㄤ篃鍜屽墠闈㈠垪涓劇殑瀹炵幇宸笉澶氥傝鎴戜滑鏉ョ湅鐪嬭繖涓」鐩湁浠涔堢壒鍒殑鍚с?br><br> <h1>涓銆佷嬌鐢ㄦ柟娉?/h1> 鎵撳紑涓婚〉錛岀敱浜庡叕鍙哥綉緇滅姝VN浠庡閮ㄦ洿鏂幫紝鎵浠ュ彧鑳戒笅杞戒簡鎵撳寘鐨勬簮浠g爜銆傝В鍘嬪悗錛岀湅鍒版湁涓猟oc鐩綍錛岃繘鍘伙紝鎵撳紑浣跨敤鏂囨。錛屽彂鐜頒嬌鐢ㄦ柟娉曟瀬涓虹畝鍗曪細<br>To use TCMalloc, just link TCMalloc into your application via the "-ltcmalloc" linker flag.鍐嶇湅綆楁硶錛屼篃娌′粈涔堢壒鍒殑錛岃繕鏄拰slab浠ュ強SGI STL鍒嗛厤鍣ㄧ被浼肩殑綆楁硶銆?br>unix鐜灞呯劧鍙閾炬帴榪欎釜tcmalloc搴撳氨鍙互浜嗭紒錛屽お鏂逛究浜嗭紝涓嶈繃鎴戞墜澶存病鏈塴inux鐜錛屾枃妗d笂涔熸病鎻愬埌windows鐜鎬庝箞浣跨敤錛?br>鎵撳紑婧愪唬鐮佸寘錛屾湁涓獀s2003瑙e喅鏂規錛屾墦寮錛岄殢渚挎寫閫変竴涓祴璇曢」鐩紝鏌ョ湅欏圭洰灞炴э紝鍙戠幇浠呬粎鏈?鐐逛笉鍚岋細<br>1銆侀摼鎺ュ櫒鍛戒護琛岄噷澶氫簡<br>  "..\..\release\libtcmalloc_minimal.lib"錛屽氨鏄摼鎺ョ殑鏃跺欎緷璧栦簡榪欎釜鍐呭瓨浼樺寲搴撱?br>2銆侀摼鎺ュ櫒->杈撳叆->寮哄埗絎﹀彿寮曠敤 澶氫簡 __tcmalloc銆?br>榪欐牱灝卞彲浠ユ紜殑浣跨敤tcmalloc搴撲簡錛屾祴璇曚簡涓嬶紝嫻嬭瘯欏圭洰榪愯OK!<br><br> <h1>浜屻佸浣曟浛鎹RT鐨刴alloc</h1> 浠庡墠闈㈢殑鎻忚堪鍙煡錛岄」鐩己鍒跺紩鐢ㄤ簡__tcmalloc錛?鎼滅儲浜嗘祴璇曚唬鐮侊紝娌″彂鐜扮敤鍒癬tcmalloc鐩稿叧鐨勫嚱鏁板拰鍙橀噺,榪欎釜閫夐」搴旇鏄負浜嗛槻姝ll琚紭鍖栨帀(鍥犱負浠g爜閲屾病鏈変粈涔堝湴鏂圭敤鍒拌繖涓猟ll鐨勭鍙?銆?br>鍒濈湅璧鋒潵錛岄摼鎺ヨ繖涓簱鍚庯紝涓嶄細褰卞搷浠諱綍鐜版湁浠g爜:鎴戜滑娌℃湁寮曠敤榪欎釜Lib搴撶殑澶存枃浠訛紝涔熸病鏈変嬌鐢ㄨ繃榪欎釜dll鐨勫鍑哄嚱鏁般傞偅涔堣繖涓猟ll鏄庝箞浼樺寲搴旂敤紼嬪簭鎬ц兘鐨勫憿錛?br>瀹為檯璋冭瘯錛屾灉鐒跺彂鐜伴棶棰樹簡錛岀湅鐪嬪涓嬩唬鐮?br>    void* pData = malloc(100);<br>00401085 6A 64            push        64h  <br>00401087 FF 15 A4 20 40 00 call        dword ptr [__imp__malloc (4020A4h)] <br>璺熻釜 call malloc榪欏彞錛宻tep榪涘幓錛屽彂鐜版槸<br>78134D09 E9 D2 37 ED 97   jmp         `anonymous namespace'::LibcInfoWithPatchFunctions<8>::Perftools_malloc (100084E0h) <br>鏋滅劧錛屼粠榪欓噷寮濮嬶紝灝辮煩杞埌libtcmalloc鎻愪緵鐨凱erftools_malloc浜嗐?br>鍘熸潵鏄氳繃API鎸傞挬鏉ュ疄鐜版棤緙濇浛鎹㈢郴緇熻嚜甯︾殑malloc絳塩rt鍑芥暟鐨勶紝鑰屼笖榪樻槸閫氳繃澶у鍏鐨勪笉鎺ㄨ崘鐨勬敼鍐欏嚱鏁板叆鍙f寚浠ゆ潵瀹炵幇鐨勶紝涓鑸彧鏈夊湪娓告垙澶栨寕鍜岄噾灞辮瘝闇鎬箣綾葷殑杞歡鎵嶄細鐢ㄥ埌榪欐牱鐨勬寕閽╂妧鏈紝<br>鑰屼笖閲戝北璇嶉湼緇忓父闇瑕佹洿鏂拌ˉ涓佽В鍐充笉鍚岀郴緇熷吋瀹歸棶棰樸?br><br> <h1>涓夈佹ц兘宸埆鍘熷洜</h1> 濡傚墠闈㈡墍榪幫紝tcmalloc紜疄鐢ㄤ簡寰坔acker鐨勫姙娉曟潵瀹炵幇鏃犵紳鐨勬浛鎹㈢郴緇熻嚜甯︾殑鍐呭瓨鍒嗛厤鍑芥暟錛堟湰浜哄湪浣跨敤榪欑被鎶鏈氬父鏄敤鏉ュ共鍧忎簨鐨勩傘傘傦級錛屼絾鏄繖涔熶笉瓚充互瑙i噴涓轟粈涔堝畠鐨勬晥鐜囨瘮鎴戜滑鑷繁鐨勫ソ閭d箞澶氥?br>鍥炲埌tcmalloc 鐨勬墜鍐岋紝tcmalloc闄や簡浣跨敤甯歌鐨勫皬鍐呭瓨綆$悊澶栵紝瀵瑰綰跨▼鐜鍋氫簡鐗規畩澶勭悊錛岃繖鍜屾垜鍘熸潵瑙佸埌鐨勫唴瀛樺垎閰嶅櫒澶ф湁涓嶅悓錛屼竴鑸殑鍐呭瓨鍒嗛厤鍣ㄤ綔鑰呴兘浼氬伔鎳掞紝鎶婂綰跨▼闂鎵旂粰浣跨敤鑰咃紝澶у鏄姞<br>涓猙ool鍨嬬殑妯℃澘鍙傛暟鏉ヨ〃紺烘槸鍚︽槸澶氱嚎紼嬬幆澧冿紝榪樼編鍏跺悕鏇?鍙畾鍒訛紝鏈簡榪樺緱鍚瑰槝涓嬫ā鏉跨殑浼樿秺鎬с?br>tcmalloc鏄庝箞鍋氱殑鍛紵 絳旀鏄瘡綰跨▼涓涓猅hreadCache錛屽ぇ閮ㄥ垎鎿嶄綔緋葷粺閮戒細鏀寔thread local storage 灝辨槸浼犺涓殑TLS,榪欐牱灝卞彲浠ュ疄鐜版瘡綰跨▼涓涓垎閰嶅櫒浜嗭紝<br>榪欐牱錛屼笉鍚岀嚎紼嬪垎閰嶉兘鏄湪鍚勮嚜鐨則hreadCache閲屽垎閰嶇殑銆傛垜浠殑欏圭洰鐨勫垎閰嶅櫒鐢變簬鏄綰跨▼鐜鐨勶紝鎵浠ヤ笉綆′笁涓冧簩鍗佷竴錛屽叏閮藉姞閿佷簡錛屾ц兘鑷劧灝變綆浜嗐?br><br>浠呬粎鏄姝わ紝榪樻槸涓嶈凍浠ュ皢tcmalloc鍜宲tmalloc2鍒嗕釜楂樹笅錛屽悗鑰呬篃鏄瘡涓嚎紼嬮兘鏈塼hreadCache鐨勩?br>鍏充簬榪欎釜闂錛宒oc閲屾湁涓孌佃鏄庯紝鍘熸枃璐村嚭鏉ワ細<br>ptmalloc2 also reduces lock contention by using per-thread arenas but there is a big problem with ptmalloc2's use of per-thread arenas. In ptmalloc2 memory can never move from one arena to another. This can lead to huge amounts of wasted space.<br>澶ф剰鏄繖鏍風殑錛歱tmalloc2 涔熸槸閫氳繃tls鏉ラ檷浣庣嚎紼嬮攣錛屼絾鏄痯tmalloc2鍚勪釜綰跨▼鐨勫唴瀛樻槸鐙珛鐨勶紝涔熷氨鏄錛岀涓涓嚎紼嬬敵璇風殑鍐呭瓨錛岄噴鏀劇殑鏃跺欒繕鏄繀欏繪斁鍒扮涓涓嚎紼嬫睜涓紙涓嶅彲縐誨姩錛夛紝榪欐牱鍙兘瀵艱嚧澶ч噺鍐呭瓨嫻垂銆?br> <br> <h1>鍥涖佷唬鐮佺粏鑺?/h1> <h2>1銆佹棤緙濇浛鎹alloc絳塩rt鍜岀郴緇熷垎閰嶅嚱鏁般?/h2>    鍓嶉潰鎻愬埌tcmalloc浼氭棤緙濈殑鏇挎崲鎺夊師鏈塪ll涓殑malloc錛岃繖灝辨剰鍛崇潃浣跨敤tcmalloc鐨勯」鐩繀欏繪槸 MD錛堝綰跨▼dll錛夋垨鑰匨Dd錛堝綰跨▼dll璋冭瘯錛夈倀cmalloc鐨刣ll瀹氫箟浜嗕竴涓?br>static TCMallocGuard module_enter_exit_hook;<br>鐨勯潤鎬佸彉閲忥紝榪欎釜鍙橀噺浼氬湪dll鍔犺澆鐨勬椂鍊欏厛浜嶥llMain榪愯錛屽湪榪欎釜綾葷殑鏋勯犲嚱鏁幫紝浼氳繍琛孭atchWindowsFunctions鏉ユ寕閽╂墍鏈塪ll鐨?malloc銆乫ree銆乶ew絳夊垎閰嶅嚱鏁幫紝榪欐牱灝辮揪鍒頒簡鏇挎崲鍔熻兘錛岄櫎姝や箣澶栵紝<br>涓轟簡淇濊瘉緋葷粺鍏煎鎬э紝鎸傞挬API鐨勬椂鍊欒繕瀹炵幇浜嗘櫤鑳藉垎鏋愭寚浠わ紝鍚﹀垯鍐欏叆絎竴鏉mp鎸囦護鐨勬椂鍊欏彲鑳戒細鐮寸幆鍚庣畫鎸囦護鐨勫畬鏁存с?br><br> <h2>2銆丩ibcInfoWithPatchFunctions 鍜孴hreadCache銆?/h2> LibcInfoWithPatchFunctions妯℃澘綾誨寘鍚玹cmalloc瀹炵幇鐨勪紭鍖栧悗鐨刴alloc絳変竴緋誨垪鍑芥暟銆侺ibcInfoWithPatchFunctions鐨勬ā鏉垮弬鏁板湪鎴戠湅鏉ユ病浠涔堢敤澶勶紝tcmalloc榛樿鍙互鎸傞挬<br>鏈澶?0涓甫鏈塵alloc瀵煎嚭鍑芥暟鐨勫簱(鎴戞兂鑲畾鏄鐢ㄤ簡)銆俆hreadCache鍦ㄦ瘡涓嚎紼嬮兘浼氭湁涓涓猅LS瀵硅薄錛?br>__thread ThreadCache* ThreadCache::threadlocal_heap_銆?br> <h2>3銆佸彲鑳界殑闂</h2> <br>璁炬兂涓嬭繖鏍蜂竴涓儏鏅細鍋囧鏈変竴涓猟ll 鍦╰cmalloc涔嬪墠鍔犺澆錛屽茍涓斿湪鍒嗛厤浜嗗唴瀛橈紙浣跨敤crt鎻愪緵鐨刴alloc錛夛紝閭d箞鍦ㄥ姞杞絫cmalloc鍚庯紝tcmalloc浼氭浛鎹㈡墍鏈夌殑free鍑芥暟錛岀劧鍚庯紝鍦ㄦ煇涓椂鍒伙紝<br>鍦ㄥ墠闈㈢殑閭d釜dll浠g爜涓噴鏀捐鍐呭瓨錛岃繖宀備笉鏄緢鍗遍櫓銆傚疄闄呮祴璇曞彂鐜版病鏈変換浣曢棶棰橈紝鍏抽敭鍦ㄨ繖閲岋細<br> span = Static::pageheap()->GetDescriptor(p);<br>    if (!span) {<br>      // span can be NULL because the pointer passed in is invalid<br>      // (not something returned by malloc or friends), or because the<br>      // pointer was allocated with some other allocator besides<br>      // tcmalloc.  The latter can happen if tcmalloc is linked in via<br>      // a dynamic library, but is not listed last on the link line.<br>      // In that case, libraries after it on the link line will<br>      // allocate with libc malloc, but free with tcmalloc's free.<br>      (*invalid_free_fn)(ptr);  // Decide how to handle the bad free request<br>      return;<br>    } <br>tcmalloc浼氶氳繃span璇嗗埆榪欎釜鍐呭瓨鏄惁鑷繁鍒嗛厤鐨勶紝濡傛灉涓嶆槸錛宼cmalloc浼氳皟鐢ㄨdll鍘熷瀵瑰簲鍑芥暟(榪欎釜寰堥噸瑕?閲婃斁銆傝繖鏍峰氨瑙e喅浜嗚繖涓鎵嬬殑闂銆?br> <h1>浜斻佸叾浠?/h1> 鍏跺疄tcmalloc浣跨敤鐨勬瘡涓妧鏈偣鎴戜粠鍓嶉兘鐢ㄨ繃錛屼絾鏄垜浠庢潵娌℃兂榪囩敤API鎸傞挬鏉ュ疄鐜拌繖鏍蜂竴涓湁瓚g殑鍐呭瓨浼樺寲搴擄紙鍗充嬌鎯寵繃錛屼篃鏄竴闂岃繃灝卞惁瀹氫簡錛夈?br>浠巘cmalloc寰楀埌鐏墊劅錛岀粨鍚堝父鐢ㄧ殑澶栨寕鎶鏈紝鍙互寰堣交鏉劇殑寮鍙戜竴涓嫭绔嬪伐鍏鳳細榪欎釜宸ュ叿鍙互鎸傝澆鍒版寚瀹氳繘紼嬭繘琛屽唴瀛樹紭鍖栵紝鍦ㄦ垜鐪嬫潵錛岃繖鍙兘鍙互浣滀負涓涓鎸傝緟鍔╁伐鍏鋒潵浼樺寲閭d簺<br>鍐呭瓨浼樺寲鍋氱殑寰堝樊瀵艱嚧甯ч熷緢浣庣殑鍥戒駭娓告垙銆?br> <img src ="http://m.shnenglu.com/feixuwu/aggbug/119980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/feixuwu/" target="_blank">feixuwu</a> 2010-07-10 17:32 <a href="http://m.shnenglu.com/feixuwu/archive/2010/07/10/119980.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://360inns.com" target="_blank">国产精品99久久久久久www</a>| <a href="http://56lw.com" target="_blank">欧美成人国产va精品日本一级</a>| <a href="http://www-893333.com" target="_blank">久久精品国产清自在天天线 </a>| <a href="http://irongxun.com" target="_blank">久久躁狠狠躁夜夜爽</a>| <a href="http://km43yy.com" target="_blank">久久精品国产综合精品</a>| <a href="http://798814.com" target="_blank">久久精品一区二区三区中文字幕 </a>| <a href="http://pear9.com" target="_blank">国内精品国语自产拍在线观看</a>| <a href="http://yye321.com" target="_blank">国产一区二区日韩精品</a>| <a href="http://096577.com" target="_blank">影音国产精品</a>| <a href="http://hznaja.com" target="_blank">亚洲系列中文字幕</a>| <a href="http://555888666.com" target="_blank">欧美一区二区福利在线</a>| <a href="http://977dy.com" target="_blank">免费在线欧美黄色</a>| <a href="http://8888590.com" target="_blank">亚洲精品美女在线观看播放</a>| <a href="http://66y3.com" target="_blank">亚洲婷婷免费</a>| <a href="http://360inns.com" target="_blank">久久久精品日韩</a>| <a href="http://nxyhbz.com" target="_blank">欧美日韩岛国</a>| <a href="http://fs-nanxiang.com" target="_blank">国产亚洲激情</a>| <a href="http://xashp.com" target="_blank">99精品国产热久久91蜜凸</a>| <a href="http://baostat.com" target="_blank">亚洲欧美日韩成人高清在线一区</a>| <a href="http://vod3366.com" target="_blank">久久久久久久999精品视频</a>| <a href="http://51duanxinmao.com" target="_blank">女人天堂亚洲aⅴ在线观看</a>| <a href="http://899399com.com" target="_blank">亚洲人成毛片在线播放</a>| <a href="http://bocai4488.com" target="_blank">午夜在线一区</a>| <a href="http://wltaste.com" target="_blank">欧美久久婷婷综合色</a>| <a href="http://cancerrxa.com" target="_blank">一区二区三区精品视频在线观看</a>| <a href="http://7sscc.com" target="_blank">欧美一区二区在线</a>| <a href="http://jx963.com" target="_blank">欧美日韩视频第一区</a>| <a href="http://www17bxbx.com" target="_blank">国产区精品视频</a>| <a href="http://jisuyswang.com" target="_blank">av成人动漫</a>| <a href="http://fyfsds.com" target="_blank">欧美二区在线观看</a>| <a href="http://wxtarena.com" target="_blank">午夜久久久久久</a>| <a href="http://fs-nanxiang.com" target="_blank">欧美日韩国产欧美日美国产精品</a>| <a href="http://cc28256.com" target="_blank">国产一区二区三区的电影</a>| <a href="http://7373se.com" target="_blank">夜夜嗨av色综合久久久综合网 </a>| <a href="http://www24668.com" target="_blank">一区二区三区四区国产精品</a>| <a href="http://ccnn33.com" target="_blank">久久国产精品一区二区</a>| <a href="http://gzxyh88.com" target="_blank">国产精品高潮呻吟视频</a>| <a href="http://lao64.com" target="_blank">亚洲人成绝费网站色www</a>| <a href="http://457745.com" target="_blank">久久国产一区</a>| <a href="http://993934.com" target="_blank">在线视频欧美日韩</a>| <a href="http://dv6699.com" target="_blank">欧美精品三级</a>| <a href="http://227c7.com" target="_blank">91久久精品视频</a>| <a href="http://haochen072.com" target="_blank">久久成人这里只有精品</a>| <a href="http://cnlbogs.com" target="_blank">99精品免费</a>| <a href="http://www36633.com" target="_blank">久久久久久久91</a>| <a href="http://www-787333.com" target="_blank">一区二区电影免费观看</a>| <a href="http://yqr55.com" target="_blank">美日韩丰满少妇在线观看</a>| <a href="http://zooxoft.com" target="_blank">国产日韩欧美二区</a>| <a href="http://wwww20.com" target="_blank">香蕉乱码成人久久天堂爱免费 </a>| <a href="http://ynjzwh.com" target="_blank">午夜欧美大片免费观看</a>| <a href="http://seqingdao.com" target="_blank">亚洲乱码国产乱码精品精</a>| <a href="http://www-188445.com" target="_blank">老巨人导航500精品</a>| <a href="http://1323666.com" target="_blank">国产亚洲精品久久久久动</a>| <a href="http://9955377.com" target="_blank">亚洲欧美综合国产精品一区</a>| <a href="http://qiezisp2.com" target="_blank">亚洲最新视频在线</a>| <a href="http://syfeichi.com" target="_blank">欧美久久视频</a>| <a href="http://mfgun.com" target="_blank">亚洲一级网站</a>| <a href="http://797298.com" target="_blank">亚洲午夜久久久</a>| <a href="http://hafenchen.com" target="_blank">国产精品二区影院</a>| <a href="http://seanzhau.com" target="_blank">亚洲欧美日韩综合国产aⅴ</a>| <a href="http://3990033.com" target="_blank">一本色道久久加勒比88综合</a>| <a href="http://apap77.com" target="_blank">欧美三级电影一区</a>| <a href="http://zhijiasd.com" target="_blank">一区二区三区不卡视频在线观看</a>| <a href="http://kxm6868.com" target="_blank">亚洲激情婷婷</a>| <a href="http://6faa.com" target="_blank">国产精品白丝jk黑袜喷水</a>| <a href="http://yzstbjt.com" target="_blank">亚洲与欧洲av电影</a>| <a href="http://yp77741.com" target="_blank">午夜精品久久久久久99热软件</a>| <a href="http://021-job.com" target="_blank">国产精品爽爽ⅴa在线观看</a>| <a href="http://www49718.com" target="_blank">午夜精品国产更新</a>| <a href="http://sd-12530.com" target="_blank">欧美亚洲一级片</a>| <a href="http://7467tom.com" target="_blank">激情五月婷婷综合</a>| <a href="http://20074972.com" target="_blank">欧美激情亚洲精品</a>| <a href="http://maokk77.com" target="_blank">欧美精品免费在线观看</a>| <a href="http://azaz7.com" target="_blank">亚洲在线观看</a>| <a href="http://www-878009.com" target="_blank">校园春色综合网</a>| <a href="http://haochen072.com" target="_blank">在线激情影院一区</a>| <a href="http://330310c.com" target="_blank">亚洲精品在线一区二区</a>| <a href="http://btbt7086.com" target="_blank">国产精品高潮在线</a>| <a href="http://173881.com" target="_blank">久久综合网络一区二区</a>| <a href="http://nvpuow.com" target="_blank">欧美国产日韩一区二区在线观看 </a>| <a href="http://dfrllaser.com" target="_blank">一区二区三区 在线观看视频</a>| <a href="http://216667.com" target="_blank">亚洲人成啪啪网站</a>| <a href="http://quoviajes.com" target="_blank">欧美性淫爽ww久久久久无</a>| <a href="http://778kb.com" target="_blank">欧美在线亚洲</a>| <a href="http://by1422.com" target="_blank">麻豆精品网站</a>| <a href="http://by777117.com" target="_blank">亚洲一区999</a>| <a href="http://jybiotek.com" target="_blank">久久xxxx</a>| <a href="http://244223.com" target="_blank">亚洲精品一二三</a>| <a href="http://www-798009.com" target="_blank">亚洲校园激情</a>| <a href="http://avse98.com" target="_blank">亚洲欧洲在线一区</a>| <a href="http://8090567.com" target="_blank">亚洲综合色在线</a>| <a href="http://mm778899.com" target="_blank">亚洲欧洲日本国产</a>| <a href="http://www-5013.com" target="_blank">亚洲综合成人婷婷小说</a>| <a href="http://118017.com" target="_blank">亚洲国产精品第一区二区</a>| <a href="http://wallypanel.com" target="_blank">99国产精品国产精品久久 </a>| <a href="http://03qt.com" target="_blank">欧美一区二区免费</a>| <a href="http://sxxawef.com" target="_blank">久久久噜噜噜久久</a>| <a href="http://04781900.com" target="_blank">亚洲性夜色噜噜噜7777</a>| <a href="http://457745.com" target="_blank">久久久久国产精品人</a>| <a href="http://wwwxigua66.com" target="_blank">国产精品成人aaaaa网站</a>| <a href="http://xxxsxx.com" target="_blank">欧美在线观看网址综合</a>| <a href="http://goldteddy.com" target="_blank">免费精品99久久国产综合精品</a>| <a href="http://caowo65.com" target="_blank">亚洲视频一区二区</a>| <a href="http://yx3369.com" target="_blank">久久久国产亚洲精品</a>| <a href="http://woshinannan741.com" target="_blank">99re8这里有精品热视频免费</a>| <a href="http://8xxjj.com" target="_blank">亚洲已满18点击进入久久</a>| <a href="http://3333347.com" target="_blank">亚洲国产另类 国产精品国产免费</a>| <a href="http://gdjuba.com" target="_blank">日韩视频一区二区三区</a>| <a href="http://520taose.com" target="_blank">伊人久久大香线蕉综合热线</a>| <a href="http://kpd521.com" target="_blank">亚洲永久免费av</a>| <a href="http://9a5x.com" target="_blank">99pao成人国产永久免费视频</a>| <a href="http://baluka-tw.com" target="_blank">欧美一级午夜免费电影</a>| <a href="http://www-tk8899.com" target="_blank">亚洲视频一区二区</a>| <a href="http://194123.com" target="_blank">免费不卡视频</a>| <a href="http://sauske.com" target="_blank">久久久欧美精品sm网站</a>| <a href="http://8090567.com" target="_blank">国产精品视频</a>| <a href="http://www311pi.com" target="_blank">一区二区三区高清不卡</a>| <a href="http://www280999.com" target="_blank">亚洲欧洲三级</a>| <a href="http://kissgz.com" target="_blank">老司机精品福利视频</a>| <a href="http://663747.com" target="_blank">久久久人成影片一区二区三区观看 </a>| <a href="http://44ie.com" target="_blank">久久亚洲二区</a>| <a href="http://m72722.com" target="_blank">久久福利一区</a>| <a href="http://pfpf662.com" target="_blank">国产精品久久久久9999吃药</a>| <a href="http://av2027.com" target="_blank">亚洲日本久久</a>| <a href="http://40346c.com" target="_blank">亚洲精品国产精品乱码不99</a>| <a href="http://wo6wo.com" target="_blank">久久嫩草精品久久久久</a>| <a href="http://56qn.com" target="_blank">久久久久欧美精品</a>| <a href="http://cancerrxa.com" target="_blank">国产视频一区在线观看一区免费</a>| <a href="http://qq666qq.com" target="_blank">制服丝袜亚洲播放</a>| <a href="http://hellomusiczone.com" target="_blank">在线综合+亚洲+欧美中文字幕</a>| <a href="http://wwwnnnn.com" target="_blank">免费精品视频</a>| <a href="http://www-45553.com" target="_blank">亚洲电影免费在线</a>| <a href="http://xissy.com" target="_blank">亚洲欧洲日本一区二区三区</a>| <a href="http://wwww76.com" target="_blank">美女露胸一区二区三区</a>| <a href="http://868482.com" target="_blank">欧美二区不卡</a>| <a href="http://pigkrtv.com" target="_blank">99精品国产在热久久婷婷</a>| <a href="http://23230066.com" target="_blank">欧美乱在线观看</a>| <a href="http://www-tt211.com" target="_blank">日韩午夜精品视频</a>| <a href="http://rosi2030.com" target="_blank">亚洲中午字幕</a>| <a href="http://heshundadi.com" target="_blank">国产精品女同互慰在线看</a>| <a href="http://666675com.com" target="_blank">亚洲一区二区在线播放</a>| <a href="http://75yyyy.com" target="_blank">欧美一区二区日韩一区二区</a>| <a href="http://sdtricoop.com" target="_blank">国产欧美一区二区精品仙草咪</a>| <a href="http://337105.com" target="_blank">午夜在线电影亚洲一区</a>| <a href="http://152mu.com" target="_blank">快she精品国产999</a>| <a href="http://caofujia.com" target="_blank">亚洲人成在线播放网站岛国</a>| <a href="http://cl6m.com" target="_blank">欧美日韩国产免费</a>| <a href="http://777888789.com" target="_blank">亚洲一区视频</a>| <a href="http://zhhtianyi.com" target="_blank">久久久综合精品</a>| <a href="http://8xxjj.com" target="_blank">亚洲高清网站</a>| <a href="http://339505.com" target="_blank">欧美日韩精品系列</a>| <a href="http://48488a.com" target="_blank">亚洲欧美国产精品专区久久</a>| <a href="http://juegold.com" target="_blank">久久久久久国产精品mv</a>| <a href="http://www5xzz1.com" target="_blank">91久久精品网</a>| <a href="http://9585865.com" target="_blank">国产精品久久一卡二卡</a>| <a href="http://411233.com" target="_blank">久久精品国产999大香线蕉</a>| <a href="http://72nnnn.com" target="_blank">欧美国产专区</a>| <a href="http://889644.com" target="_blank">亚洲一二三区在线</a>| <a href="http://xy3977.com" target="_blank">国产一区二区三区四区在线观看 </a>| <a href="http://jlhao123.com" target="_blank">国产精品国产三级国产专播精品人</a>| <a href="http://dayomall.com" target="_blank">亚洲久久视频</a>| <a href="http://lymzdd.com" target="_blank">欧美一区二区三区四区在线观看地址 </a>| <a href="http://www-893333.com" target="_blank">免费高清在线一区</a>| <a href="http://xjksrbh.com" target="_blank">亚洲精品乱码视频</a>| <a href="http://75yyyy.com" target="_blank">欧美一站二站</a>| <a href="http://7770790.com" target="_blank">亚洲国产人成综合网站</a>| <a href="http://22abb.com" target="_blank">欧美午夜精品</a>| <a href="http://765409.com" target="_blank">久久久噜噜噜久久人人看</a>| <a href="http://iietao.com" target="_blank">日韩亚洲视频在线</a>| <a href="http://www-49hk.com" target="_blank">久久综合色天天久久综合图片</a>| <a href="http://www-964664.com" target="_blank">亚洲乱码国产乱码精品精天堂</a>| <a href="http://uu774.com" target="_blank">国产精品久久久一本精品</a>| <a href="http://y7y7s.com" target="_blank">另类尿喷潮videofree</a>| <a href="http://cca22.com" target="_blank">亚洲网站在线</a>| <a href="http://dracotek.com" target="_blank">亚洲国产精品va在线看黑人 </a>| <a href="http://4c7175.com" target="_blank">一本色道精品久久一区二区三区 </a>| <a href="http://s0247.com" target="_blank">这里只有精品视频在线</a>| <a href="http://456kp.com" target="_blank">毛片av中文字幕一区二区</a>| <a href="http://cao3636.com" target="_blank">一区二区三区日韩欧美精品</a>| <a href="http://alio-ai.com" target="_blank">国产一区二区三区免费不卡</a>| <a href="http://xxxbobba.com" target="_blank">欧美日韩国产在线观看</a>| <a href="http://moonshile.com" target="_blank">久久精品夜色噜噜亚洲aⅴ</a>| <a href="http://ccc159.com" target="_blank">一本久久综合</a>| <a href="http://uu6623.com" target="_blank">亚洲激情视频网站</a>| <a href="http://778km.com" target="_blank">卡通动漫国产精品</a>| <a href="http://javliabary.com" target="_blank">亚洲男人av电影</a>| <a href="http://b476.com" target="_blank">日韩一级大片在线</a>| <a href="http://www-888005.com" target="_blank">在线成人中文字幕</a>| <a href="http://lovehefei.com" target="_blank">国产情侣久久</a>| <a href="http://www-68689.com" target="_blank">欧美午夜片在线免费观看</a>| <a href="http://www-136hk.com" target="_blank">免费亚洲电影在线</a>| <a href="http://www44448.com" target="_blank">久久久久免费</a>| <a href="http://2312138.com" target="_blank">欧美在线精品免播放器视频</a>| <a href="http://4388x3.com" target="_blank">亚洲视频香蕉人妖</a>| <a href="http://zz-777.com" target="_blank">99精品国产一区二区青青牛奶 </a>| <a href="http://cz-sensor.com" target="_blank">裸体一区二区</a>| <a href="http://2456yo.com" target="_blank">久久精品国产99</a>| <a href="http://www-85489.com" target="_blank">午夜精品久久久久久久男人的天堂 </a>| <a href="http://haoa009.com" target="_blank">美女图片一区二区</a>| <a href="http://x1317.com" target="_blank">久久精品国亚洲</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>