锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲高清乱码午夜电影网,亚洲精品乱码久久久久久久久久久久,亚洲美女aⅴ久久久91http://www.tkk7.com/huyi2006/articles/192023.html鑳℃剰鑳℃剰Thu, 10 Apr 2008 15:26:00 GMThttp://www.tkk7.com/huyi2006/articles/192023.htmlhttp://www.tkk7.com/huyi2006/comments/192023.htmlhttp://www.tkk7.com/huyi2006/articles/192023.html#Feedback0http://www.tkk7.com/huyi2006/comments/commentRss/192023.htmlhttp://www.tkk7.com/huyi2006/services/trackbacks/192023.html

浠嬬粛錛?/p>

聽聽聽聽聽聽 璁捐鍐呭瓨姹犵殑鐩爣鏄負(fù)浜?jiǎn)淇濊瘉鏈嶅姟鍣ㄩ暱鏃堕棿楂樻晥鐨剺q愯錛岄氳繃瀵圭敵璇風(fēng)┖闂村皬鑰岀敵璇烽綣佺殑瀵硅薄榪涜鏈夋晥綆$悊錛屽噺灝戝唴瀛樼鐗囩殑浜х敓錛屽悎鐞嗗垎閰嶇鐞嗙敤鎴峰唴瀛橈紝浠庤屽噺灝戠郴緇熶腑鍑虹幇鏈夋晥絀洪棿瓚沖錛岃屾棤娉曞垎閰嶅ぇ鍧楄繛緇唴瀛樼殑鎯呭喌銆?/p>

鐩爣錛?/p>

聽聽聽 姝ゆ璁捐鍐呭瓨姹犵殑鍩烘湰鐩爣錛岄渶瑕佹弧瓚崇嚎紼嬪畨鍏ㄦэ紙澶氱嚎紼嬶級(jí)錛岄傞噺鐨勫唴瀛樻硠闇茶秺鐣屾鏌ワ紝榪愯鏁堢巼涓嶅お浣庝簬malloc/free鏂瑰紡錛屽疄鐜板4-128瀛楄妭鑼冨洿鍐呯殑鍐呭瓨絀洪棿鐢寵鐨勫唴瀛樻睜綆$悊錛堥潪鍗曚竴鍥哄畾澶у皬瀵硅薄綆$悊鐨勫唴瀛樻睜錛夈?/p>

鍐呭瓨姹犳妧鏈璁′笌瀹炵幇

聽聽聽 鏈唴瀛樻睜鐨勮璁℃柟娉曚富瑕佸弬鑰僑GI鐨刟lloc鐨勮璁℃柟妗堬紝涓轟簡(jiǎn)閫傚悎涓鑸殑搴旂敤錛屽茍鍦╝lloc鐨勫熀紜涓婂仛涓浜涚畝鍗曠殑淇敼銆?/p>

聽聽聽 Mempool鐨勫唴瀛樻睜璁捐鏂規(guī)濡備笅錛堜篃鍙弬鑰冨欐嵎銆婃繁鍏ュ墫鏋怱TL銆嬶級(jí)

聽聽聽 浠庣郴緇熺敵璇峰ぇ鍧梙eap鍐呭瓨錛屽湪姝ゅ唴瀛樹笂鍒掑垎涓嶅悓澶у皬鐨勫尯鍧楋紝騫舵妸鍏鋒湁鐩稿悓澶у皬鐨勫尯鍧楄繛鎺ヨ搗鏉ワ紝緇勬垚涓涓摼琛ㄣ傛瘮濡侫澶у皬鐨勫潡錛岀粍鎴愰摼琛↙錛屽綋鐢寵A澶у皬鏃訛紝鐩存帴浠庨摼琛↙澶撮儴錛堝鏋滀笉涓虹┖錛変笂鍙栧埌涓鍧椾氦緇欑敵璇瘋(gè)咃紝褰撻噴鏀続澶у皬鐨勫潡鏃訛紝鐩存帴鎸傛帴鍒癓鐨勫ご閮ㄣ傚唴瀛樻睜鐨勫師鐞嗘瘮杈冪畝鍗曪紝浣嗘槸鍦ㄥ叿浣撳疄鐜拌繃紼嬩腑澶ч噺鐨勭粏鑺傞渶瑕佹敞鎰忋?/p>

聽聽聽 1錛氬瓧鑺傚榻愩?/p>

聽聽聽 涓轟簡(jiǎn)鏂逛究鍐呭瓨姹犱腑瀵硅薄鐨勭鐞嗭紝闇瑕佸鐢寵鍐呭瓨絀洪棿鐨勮繘琛岃皟鏁達(dá)紝鍦∕empool涓紝瀛楄妭瀵歸綈鐨勫ぇ灝忎負(fù)鏈鎺ヨ繎8鍊嶆暟鐨勫瓧鑺傛暟銆傛瘮濡傦紝鐢ㄦ埛鐢寵5涓瓧鑺傦紝Mempool棣栧厛浼?xì)鎶婂畠璋冩暣湄?fù)8瀛楄妭銆傛瘮濡傜敵璇?2瀛楄妭錛屼細(xì)璋冩暣涓?4錛屽姣斿叧緋誨涓?/p>

搴忓彿

瀵歸綈瀛楄妭

鑼冨洿

0

8

1-8

1

16

9-16

2

24

17-24

3

32

25-32

4

40

33-40

5

48

41-48

6

56

49-56

7

64

57-64

8

72

65-72

9

80

73-80

10

88

81-88

11

96

89-96

12

104

97-104

13

112

105-112

14

120

113-120

15

128

121-128

錛堝浘1錛?/p>

瀵逛簬瓚呰繃128瀛楄妭鐨勭敵璇鳳紝鐩存帴璋冪敤malloc鍑芥暟鐢寵鍐呭瓨絀洪棿銆傝繖閲岃璁$殑鍐呭瓨姹犲茍涓嶆槸瀵規(guī)墍鏈夌殑瀵硅薄榪涜鍐呭瓨綆$悊錛屽彧鏄鐢寵鍐呭瓨絀洪棿灝忥紝鑰岀敵璇烽綣佺殑瀵硅薄榪涜綆$悊錛屽浜庤秴榪?28瀛楄妭鐨勫璞$敵璇鳳紝涓嶄簣鑰冭檻銆傝繖涓渶瑕佷笌瀹為檯欏圭洰緇撳悎錛屽茍涓嶆槸鍥哄畾涓嶅彉鐨勩傚疄鐜板榻愭搷浣滅殑鍑芥暟濡備笅

static size_t round_up(size_t size)
{
聽聽聽聽聽聽聽 return (((size)+7) &~ 7);// 鎸?瀛楄妭瀵歸綈
}

2錛氭瀯寤虹儲(chǔ)寮曡〃

鍐呭瓨姹犱腑綆$悊鐨勫璞¢兘鏄浐瀹氬ぇ灝忥紝鐜板湪瑕佺鐞?-128瀛楄妭鐨勮寖鍥村唴鐨勫璞$敵璇風(fēng)┖闂達(dá)紝闄や簡(jiǎn)閲囩敤涓婇潰鎻愬埌鐨勫瓧鑺傚榻愬錛岃繕闇瑕佸彉閫氫竴涓嬶紝榪欏氨鏄緩绔嬬儲(chǔ)寮曡〃錛屽仛娉曞涓嬶紱
static _obj* 聽free_list[16];
鍒涘緩涓涓寘鍚?6涓猒obj*鎸囬拡鐨勬暟緇勶紝鍏充簬_obj緇撴瀯鍚庨潰璇︾粏璁茶В銆俧ree_list[0]璁板綍鎵鏈夌┖闂茬┖闂翠負(fù)8瀛楄妭鐨勯摼琛ㄧ殑棣栧湴鍧錛沠ree_list[1]瀵瑰簲16瀛楄妭鐨勯摼琛紝free_list[2]瀵瑰簲24瀛楄妭鐨勫垪琛ㄣ俧ree_list涓殑涓嬫爣鍜屽瓧鑺傞摼琛ㄥ搴斿叧緋誨弬鑰冨浘1涓殑鈥滃簭鍙封濆拰鈥滃榻愬瓧鑺傗濅箣闂寸殑鍏崇郴銆傝繖縐嶅叧緋伙紝鎴戜滑寰堝鏄撶敤綆楁硶璁$畻鍑烘潵銆傚涓?/p>

static size_t freelist_index(size_t size)
{
聽聽聽聽聽聽聽 return (((size)+7)/7-1);// 鎸?瀛楄妭瀵歸綈
}

聽聽聽 鎵浠ワ紝榪欐牱褰撶敤鎴風(fēng)敵璇風(fēng)┖闂碅鏃訛紝鎴戜滑鍙槸閫氳繃涓婇潰綆鍗曠殑杞崲錛屽氨鍙互璺寵漿鍒板寘鍚獳瀛楄妭澶у皬鐨勭┖闂查摼琛ㄤ笂,濡備笅錛?br />_obj** p = free_list[freelist_index(A)];

3:鏋勫緩絀洪棽閾捐〃

閫氳繃绱㈠紩琛紝鎴戜滑鐭ラ亾mempool涓淮鎸佺潃16鏉$┖闂查摼琛紝榪欎簺絀洪棽閾捐〃涓鐞嗙殑絀洪棽瀵硅薄澶у皬鍒嗗埆涓?錛?6錛?4錛?2錛?0鈥?28銆傝繖浜涚┖闂查摼琛ㄩ摼鎺ヨ搗鏉ョ殑鏂瑰紡瀹屽叏鐩稿悓銆備竴鑸儏鍐典笅鎴戜滑鏋勫緩鍗曢摼琛ㄦ椂闇瑕佸垱寤哄涓嬬殑涓涓粨鏋勪綋銆?/p>

struct Obj
{
聽聽聽 Obj *next;
聽聽聽 Char* p;
聽聽聽 Int iSize;
}

next鎸囬拡鎸囧悜涓嬩竴涓繖鏍風(fēng)殑緇撴瀯錛宲鎸囧悜鐪熸鍙敤絀洪棿,iSize鐢ㄤ簬鍙槸鍙敤絀洪棿鐨勫ぇ灝忥紝鍦ㄥ叾浠栫殑涓浜涘唴瀛樻睜瀹炵幇涓紝榪樻湁鏇村鏉傜殑緇撴瀯浣擄紝姣斿榪樺寘鎷褰曟緇撴瀯浣撶殑涓婄駭緇撴瀯浣撶殑鎸囬拡錛岀粨鏋勪綋涓綋鍓嶄嬌鐢ㄧ┖闂寸殑鍙橀噺絳夛紝褰撶敤鎴風(fēng)敵璇風(fēng)┖闂存椂錛屾妸姝ょ粨鏋勪綋娣誨姞鐨勭敤鎴風(fēng)敵璇風(fēng)┖闂翠腑鍘伙紝姣斿鐢ㄦ埛鐢寵12瀛楄妭鐨勭┖闂達(dá)紝鍙互榪欐牱鍋?/p>

Obj *p = (Obj*)malloc(12+sizeof(Obj));
p->next = NULL;
p->p = (char*)p+sizeof(Obj);
p->iSize = 12;

浣嗘槸錛屾垜浠茍娌℃湁閲囩敤榪欑鏂瑰紡錛岃繖縐嶆柟寮忕殑涓涓己鐐瑰氨鏄紝鐢ㄦ埛鐢寵灝忕┖闂存椂錛屽唴瀛樻睜鍔犳枡澶浜?jiǎn)銆傛瘮濡傜敤鎴風(fēng)敵璇?2瀛楄妭鏃訛紝鑰岀湡瀹炴儏鍐墊槸鍐呭瓨姹犲悜鍐呭瓨鐢寵浜?2+ sizeof(Obj)=12+12=24瀛楄妭鐨勫唴瀛樼┖闂達(dá)紝榪欐牱嫻垂澶ч噺鍐呭瓨鐢ㄥ湪鏍囪鍐呭瓨絀洪棿涓婂幓錛屽茍涓斾篃娌℃湁浣撶幇绱㈠紩琛ㄧ殑浼樺娍銆侻empool閲囩敤鐨勬槸union鏂瑰紡

union Obj
{
聽聽聽 Obj *next;
聽聽聽 char client_data[1];
}

榪欓噷闄や簡(jiǎn)鎶婁笂闈㈢殑struct淇敼涓簎nion錛屽茍鎶奿nt iSize鍘繪帀錛屽悓鏃舵妸char*p錛屼慨鏀逛負(fù)char client_data[1]錛屽茍娌℃湁鍋氬お澶氱殑淇敼銆傝屼紭鍔夸篃鎭版伆浣撶幇鍦ㄨ繖閲屻傚鏋滈噰鐢╯truct鏂瑰紡錛屾垜浠渶瑕佺淮鎶や袱鏉¢摼琛紝涓鏉¢摼琛ㄦ槸錛屽凡鍒嗛厤鍐呭瓨絀洪棿閾捐〃錛屽彟涓鏉℃槸鏈垎閰嶏紙絀洪棽錛夌┖闂撮摼琛ㄣ傝屾垜浠嬌鐢ㄧ儲(chǔ)寮曡〃鍜寀nion緇撴瀯浣擄紝鍙渶瑕佺淮鎶や竴鏉¢摼琛紝鍗蟲湭鍒嗛厤絀洪棿閾捐〃銆傚叿浣撳涓?/p>

绱㈠紩琛ㄧ殑浣滅敤鏈変袱鏉?錛氬涓婃墍璇達(dá)紝緇存姢16鏉$┖闂查摼琛?錛氬彉鐩歌褰曟瘡鏉¢摼琛ㄤ笂絀洪棿鐨勫ぇ灝忥紝姣斿涓嬫爣涓?鐨勭儲(chǔ)寮曡〃鍐呯淮鎸佺潃鏄ぇ灝忎負(fù)24瀛楄妭鐨勭┖闂查摼琛ㄣ傝繖鏍鋒垜浠氳繃绱㈠紩琛ㄥ噺灝戝湪緇撴瀯浣撳唴璁板綍p鎵鎸囧悜絀洪棿澶у皬鐨刬Size鍙橀噺銆備粠鑰屽噺灝?涓瓧鑺傘?/p>

Union鐨勭壒鎬ф槸錛岀粨鏋勫唴鐨勫彉閲忔槸浜掓枼瀛樺湪鐨勩傚啀榪愯鐘舵佷笅錛屽彧鏄瓨鍦ㄤ竴縐嶅彉閲忕被鍨嬨傛墍浠ュ湪榪欓噷sizeof(Obj)鐨勫ぇ灝忎負(fù)4錛岄毦閬撹繖閲屾垜浠篃闇瑕佹妸榪?瀛楄妭涔熷姞鍒扮敤鎴風(fēng)敵璇風(fēng)┖闂翠腑鍘誨槢錛熷叾瀹炰笉鏄紝濡傛灉榪欐牱錛屾垜浠張鎶規(guī)潃浜?jiǎn)union鐨勭壒鎬с?/p>

褰撴垜浠瀯寤虹┖闂插垎閰嶉摼琛ㄦ椂錛屾垜浠氳繃next鎸囧悜涓嬩竴涓猽nion緇撴瀯浣擄紝榪欐牱鎴戜滑涓嶄嬌鐢╬鎸囬拡銆傚綋鎶婅繖涓粨鏋勪綋鍒嗛厤鍑哄幓鏃訛紝鎴戜滑鐩存帴榪斿洖client_data鐨勫湴鍧錛屾鏃禼lient_data姝eソ鎸囧悜鐢寵絀洪棿鐨勯瀛楄妭銆傛墍浠ヨ繖鏍鳳紝鎴戜滑灝變笉鐢ㄥ湪鐢ㄦ埛鐢寵絀洪棿涓婃坊鍔犱換浣曚笢瑗褲?/p>


鍥?

聽聽聽 Obj鐨勮繛鎺ユ柟寮忓涓婃墍紺猴紝榪欐牱鎴戜滑鏃犻渶涓虹敤鎴風(fēng)敵璇風(fēng)┖闂存坊鍔犱換浣曞唴瀹廣偮犅犅?/p>

4錛氳褰曠敵璇風(fēng)┖闂村瓧鑺傛暟

濡傛灉閲囩敤闈㈠悜瀵硅薄鏂瑰紡錛屾垨鑰呮垜浠湪閲婃斁鍐呭瓨姹犵殑絀洪棿鏃惰兘澶熸槑紜煡閬撻噴鏀劇┖闂寸殑澶у皬錛屾棤闇閲囩敤榪欑鏂瑰紡銆?/p>


鍥?

鍦–璇█涓殑free娌℃湁浼犻掗噴鏀劇┖闂村ぇ灝忥紝鑰屽彲浠ユ紜噴鏀撅紝鍦ㄨ繖閲屼篃鏄ā浠胯繖縐嶆柟寮忥紝閲囩敤榪欑璁板綍鐢寵絀洪棿澶у皬鐨勬柟寮忓幓閲婃斁鍐呭瓨銆傜敤鎴風(fēng)敵璇風(fēng)┖闂?1鎿嶄綔灝嗗湪瀛楄妭瀵歸綈涔嬪墠鎵ц錛屾壘鍒板悎閫傜┖闂村悗錛屾妸棣栧瓧鑺傛敼鍐欎負(fù)鐢寵絀洪棿鐨勫ぇ灝忥紝褰撶劧1涓瓧鑺傛渶澶氱邯褰?56涓暟錛屽鏋滈」鐩渶瑕侊紝鍙互璁劇疆涓簊hort綾誨瀷鎴栬卛nt綾誨瀷錛屼笉榪囪繖鏍峰氨闇瑕佸崰鐢ㄧ敤鎴鋒瘮杈冨ぇ鐨勭┖闂淬傚綋閲婃斁鍐呭瓨絀洪棿鏃訛紝棣栧厛璇誨彇榪欎釜瀛楄妭錛岃幏鍙栫┖闂村ぇ灝忥紝榪涜閲婃斁銆備負(fù)浜?jiǎn)渚夸簬瀵瑰ぇ浜?28瀛楄妭瀵硅薄鐨勫ぇ灝忚繘琛屽悎閫傜殑閲婃斁錛屽悓鏃朵篃瀵瑰ぇ浜?28瀛楄妭鐨勫唴瀛樼敵璇鳳紝娣誨姞1瀛楄妭璁板綍澶у皬銆傛墍浠ョ幇鍦ㄨ繖閲岄檺鍒朵簡(jiǎn)鐢ㄦ埛鍐呭瓨鐢寵絀洪棿涓嶅緱澶т簬255瀛楄妭錛屼笉榪囩幇鍦ㄥ凡緇忔弧瓚抽」鐩姹傘傚綋鐒朵篃鍙互淇敼涓虹敤short綾誨瀷璁板綍鐢寵絀洪棿鐨勫ぇ灝忋?/p>

聽聽聽 // 鐢寵
聽聽聽 *(( unsigned char *)result) = (size_t)n;
聽聽聽聽unsigned char * pTemp = (unsigned char*)result;
聽聽聽聽++pTemp;
聽聽聽 result = (_obj*)pTemp;
聽聽聽 return result;

聽聽聽 // 閲婃斁
聽聽聽聽unsigned char * pTemp = (unsigned char *)ptr;
聽聽聽聽--pTemp;
聽聽聽聽ptr = (void*)pTemp;
聽聽聽聽n = (size_t)(*( unsigned char *)ptr);

5錛氬唴瀛樻睜鐨勫垎閰嶅師鐞?/p>

鍦ㄥ唴瀛樻睜鐨勮璁′腑錛屾湁涓や釜閲嶈鐨勬搷浣滆繃紼?錛歝hunk_alloc錛岀敵璇峰ぇ鍧楀唴瀛橈紝2錛歳efill鍥炲~鎿嶄綔錛屽唴瀛樻睜鍒濆鍖栧寲鏃跺茍涓嶆槸涓虹儲(chǔ)寮曡〃涓殑姣忎竴欏歸兘鍒涘緩絀洪棽鍒嗛厤閾捐〃錛岃繖涓繃紼嬩細(xì)鎺ㄨ繜鍒幫紝鍙湁鐢ㄦ埛鎻愬彇璇鋒眰鏃舵墠浼?xì)鍒涘圾櫩欐狅L(fēng)殑鍒嗛厤閾捐〃銆傝緇嗗弬鑰冨涓嬩唬鐮侊紙鍦╯gi涓璼tl_alloc.h鏂囦歡涓綘涔熷彲浠ョ湅鍒拌繖涓や釜鍑芥暟錛夛紝涓昏姝ラ鍦ㄦ敞閲婁腑宸茬粡璇存槑銆?/p>

/**
* @bri: 鐢寵澶у潡鍐呭瓨錛屽茍榪斿洖size*(*nobjs)澶у皬鐨勫唴瀛樺潡
* @param: size,round_up瀵歸綈鍚庣殑澶у皬,nobjs
* @return: 榪斿洖鎸囧悜絎竴涓璞″唴瀛樻寚閽?br />*/
static char* chunk_alloc(size_t size, int *nobjs)
{
聽聽聽聽 /**< 榪斿洖鎸囬拡 */
聽聽聽聽 char* __result;
聽聽聽聽 /**< 鐢寵鍐呭瓨鍧楀ぇ灝?*/
聽聽聽聽 size_t __total_bytes = size *(*nobjs);
聽聽聽聽 /**< 褰撳墠鍐呭瓨鍙敤絀洪棿 */
聽聽聽聽 size_t __bytes_left = _end_free - _start_free;

聽聽聽聽 /**< 鍐呭瓨姹犱腑榪樻湁澶х墖鍙敤鍐呭瓨 */
聽聽聽聽 if (__bytes_left >= __total_bytes)
聽聽聽聽 {
聽聽聽聽聽聽聽聽 __result = _start_free;
聽聽聽聽聽聽聽聽 _start_free += __total_bytes;
聽聽聽聽聽聽聽聽 return (__result);
聽聽聽聽 }
聽聽聽聽 /**< 鑷沖皯榪樻湁涓涓璞″ぇ灝忕殑鍐呭瓨絀洪棿 */
聽聽聽聽 else if (__bytes_left >= size)
聽聽聽聽 {
聽聽聽聽聽聽聽聽 *nobjs = (int)(__bytes_left/size);
聽聽聽聽聽聽聽聽 __total_bytes = size * (*nobjs);
聽聽聽聽聽聽聽聽 __result = _start_free;
聽聽聽聽聽聽聽聽 _start_free += __total_bytes;
聽聽聽聽聽聽聽聽 return (__result);
聽聽聽聽 }
聽聽聽聽 /**< 鍐呭瓨姹犱腑娌℃湁浠諱綍絀洪棿 */
聽聽聽聽 else
聽聽聽聽 {
聽聽聽聽聽聽聽聽 /**< 閲嶆柊鐢寵鍐呭瓨姹犵殑澶у皬 */
聽聽聽聽聽聽聽聽 size_t __bytes_to_get = 2 * __total_bytes + round_up(_heap_size >> 4);
聽聽聽聽聽聽聽聽 /**< 鎶婂唴瀛樹腑鍓╀綑鐨勭┖闂存坊鍔犲埌freelist涓?*/
聽聽聽聽聽聽聽聽 if(__bytes_left > 0)
聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 _obj *VOLATILE* __my_free_list =聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 _free_list + freelist_index(__bytes_left);
聽聽聽聽聽聽聽聽聽聽聽聽聽 ((_obj*)_start_free)->free_list_link =
*__my_free_list;
聽聽聽聽聽聽聽聽聽聽聽聽聽 *__my_free_list = (_obj*)_start_free;
聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽 // 鐢寵鏂扮殑澶у潡絀洪棿
聽聽聽聽聽聽聽聽 _start_free = (char*)malloc(__bytes_to_get);
聽聽聽聽聽聽聽聽 /*=======================================================================*/
聽聽聽聽聽聽聽聽 memset(_start_free,0,__bytes_to_get);
聽聽聽聽聽聽聽聽 /*=======================================================================*/
聽聽聽聽聽聽聽聽 // 緋葷粺鍐呭瓨宸茬粡鏃犲彲鐢ㄥ唴瀛橈紝閭d箞浠庡唴瀛樻睜涓帇緙╁唴瀛?br />聽聽聽聽聽聽聽聽 if(0 == _start_free)
聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 size_t __i;
聽聽聽聽聽聽聽聽聽聽聽聽聽 _obj *VOLATILE* __my_free_list;
聽聽聽聽聽聽聽聽聽聽聽聽聽 _obj *__p;
聽聽聽聽聽聽聽聽聽聽聽聽聽 /**< 浠巉reelist涓愰」媯(gè)鏌ュ彲鐢ㄧ┖闂?姝ゆ椂鍙敹闆嗘瘮size瀵硅薄澶х殑鍐呭瓨絀洪棿) */
聽聽聽聽聽聽聽聽聽聽聽聽聽 for (__i = size; __i <= (size_t)__MAX_BYTES; __i += __ALIGN)
聽聽聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 __my_free_list = _free_list + freelist_index(__i);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 __p = *__my_free_list;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /**< 鎵懼埌絀洪棽鍧?*/
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (__p != 0)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *__my_free_list = __p->free_list_link;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 _start_free = (char*)__p;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 _end_free = _start_free + __i;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return (chunk_alloc(size,nobjs));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 _end_free = 0;
聽聽聽聽聽聽聽聽聽聽聽聽聽 /**< 鍐嶆鐢寵鍐呭瓨錛屽彲鑳借Е鍙戜竴涓紓甯?*/
聽聽聽聽聽聽聽聽聽聽聽聽聽 _start_free = (char*)malloc(__bytes_to_get);
聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽 /**< 璁板綍褰撳墠鍐呭瓨姹犵殑瀹歸噺 */
聽聽聽聽聽聽聽聽 _heap_size += __bytes_to_get;
聽聽聽聽聽聽聽聽 _end_free = _start_free + __bytes_to_get;
聽聽聽聽聽聽聽聽 return (chunk_alloc(size,nobjs));
聽聽聽聽 }
}

/*=======================================================================*/
/**
聽* @bri: 濉厖f(xié)reelist鐨勮繛鎺ワ紝榛樿濉厖20涓?br />聽* @param: __n錛屽~鍏呭璞$殑澶у皬錛?瀛楄妭瀵歸綈鍚庣殑value
聽* @return: 絀洪棽
聽*/
static void* refill(size_t n)
{
聽聽聽聽 int __nobjs = 20;
聽聽聽聽 char* __chunk = (char*)chunk_alloc(n, &__nobjs);
聽聽聽聽 _obj *VOLATILE* __my_free_list;
聽聽聽聽 _obj *VOLATILE* __my_free_list1;
聽聽聽聽 _obj * __result;
聽聽聽聽 _obj * __current_obj;
聽聽聽聽 _obj * __next_obj;
聽聽聽聽 int __i;
聽聽聽聽 // 濡傛灉鍐呭瓨姹犱腑浠呮湁涓涓璞?br />聽聽聽聽 if (1 == __nobjs)聽
聽聽聽聽聽聽聽聽 return(__chunk);
聽聽聽聽 __my_free_list = _free_list + freelist_index(n);
聽聽聽聽 /* Build free list in chunk */
聽聽聽聽 __result = (_obj*)__chunk;
聽聽聽聽 *__my_free_list = __next_obj = (_obj*)(__chunk + n);
聽聽聽聽 __my_free_list1 = _free_list + freelist_index(n);
聽聽聽聽 for (__i = 1;; ++__i)
聽聽聽聽 {
聽聽聽聽聽聽聽聽 __current_obj = __next_obj;
聽聽聽聽聽聽聽聽 __next_obj = (_obj*)((char*)__next_obj+n);
聽聽聽聽聽聽聽聽 if(__nobjs - 1 == __i)
聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 __current_obj->free_list_link = 0;
聽聽聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽聽 }else{
聽聽聽聽聽聽聽聽聽聽聽聽聽 __current_obj->free_list_link = __next_obj;
聽聽聽聽聽聽聽聽 }
聽聽聽聽 }
聽聽聽聽 return(__result);
}

緇忚繃涓婇潰鎿嶄綔鍚庯紝鍐呭瓨姹犲彲鑳戒細(xì)鎴愪負(fù)濡備笅鐨勪竴縐嶇姸鎬併備粠鍥句笂鎴戜滑鍙互鐪嬪埌錛屽凡緇忔瀯寤轟簡(jiǎn)8錛?4錛?8錛?28瀛楄妭鐨勭┖闂插垎閰嶉摼琛紝鑰屽叾浠栨病鏈夊垎閰嶇┖闂插垎閰嶉摼琛ㄧ殑浠栦滑鐨勬寚閽堥兘鎸囧悜NULL銆傛垜浠氳繃鍒ゆ柇绱㈠紩琛ㄤ腑鐨勬寚閽堟槸鍚︿負(fù)NULL錛岀煡閬撴槸鍚﹀凡緇忔瀯寤虹┖闂插垎閰嶈〃鎴栬呯┖闂插垎閰嶈〃鏄惁鐢ㄥ畬錛屽鏋滄澶勬寚閽堜負(fù)NULL錛屾垜浠皟鐢╮efill鍑芥暟錛岄噸鏂扮敵璇?0涓繖鏍峰ぇ灝忕殑鍐呭瓨絀洪棿錛屽茍鎶婁粬浠繛鎺ヨ搗鏉ャ傚湪refill鍑芥暟鍐咃紝鎴戜滑瑕佹煡鐪嬪ぇ鍐呭瓨涓槸鍚︽湁鍙敤鍐呭瓨錛屽鏋滄湁錛屽茍涓斿ぇ灝忓悎閫傦紝灝辮繑鍥炵粰refill鍑芥暟銆?br />


鍥?

聽聽聽 6錛氱嚎紼嬪畨鍏?br />聽聽聽 閲囩敤浜掓枼浣擄紝淇濊瘉綰跨▼瀹夊叏銆?br />
鍐呭瓨姹犳祴璇?/p>

聽聽聽 鍐呭瓨姹犵殑嫻嬭瘯涓昏鍒嗕袱閮ㄥ垎嫻嬭瘯1錛氬崟綰跨▼涓媘alloc涓巑empool鐨勫垎閰嶉熷害瀵規(guī)瘮2錛氬綰跨▼涓媘alloc鍜宮empool鐨勫垎閰嶉熷害瀵規(guī)瘮錛屾垜浠垎涓?錛?0錛?6涓嚎紼嬭繘琛屾祴璇曚簡(jiǎn)銆?br />聽聽聽 嫻嬭瘯鐜錛氭搷浣滅郴緇燂細(xì)windows2003+sp1錛孷C7.1+sp1錛岀‖浠剁幆澧冿細(xì)intel(R) Celeron(R) CPU 2.53GHz,512M鐗╃悊鍐呭瓨銆?br />
聽聽聽 鐢寵鍐呭瓨絀洪棿璁懼畾濡備笅
#define ALLOCNUMBER0 4
#define ALLOCNUMBER1 7
#define ALLOCNUMBER2 23
#define ALLOCNUMBER3 56
#define ALLOCNUMBER4 10
#define ALLOCNUMBER5 60
#define ALLOCNUMBER6 5
#define ALLOCNUMBER7 80
#define ALLOCNUMBER8 9
#define ALLOCNUMBER9 100

聽聽聽 Malloc鏂瑰紡鍜宮empool鏂瑰紡鍧囦嬌鐢ㄥ涓婃暟鎹繘琛屽唴瀛樼┖闂寸殑鐢寵鍜岄噴鏀俱傜敵璇瘋繃紼嬶紝姣忔寰幆鐢寵閲婃斁涓婅堪鏁版嵁20嬈?br />聽聽聽 鎴戜滑瀵筸alloc鍜宮empool錛屽垎鍒繘琛屼簡(jiǎn)濡備笅鐢寵嬈℃暟鐨勬祴璇曪紙鍗曚綅涓轟竾錛?/p>

2

10

20

30

40

50

80

100

150

200

malloc鍜宮empool鍦ㄥ崟綰跨▼錛屽綰跨▼錛宺elease錛宒ebug鐗堢殑鍚勭嫻嬭瘯鏁版嵁錛屽艦鎴愬涓嬬殑緇熻鍥?


鍥?

鍙互鐪嬪埌mempool鏃犺鍦ㄥ綰跨▼榪樻槸鍦ㄥ崟綰跨▼鎯呭喌涓嬶紝mempool鐨勯熷害閮戒紭浜巑alloc鏂瑰紡鐨勭洿鎺ュ垎閰嶃?/p>

聽聽聽 Malloc鏂瑰紡debug妯″紡涓嬶紝鍦ㄤ笉鍚岀殑綰跨▼涓嬶紝榪愯鏃墮棿濡備笅錛岄氳繃鍥劇墖鍙煡錛宮alloc鏂瑰紡錛屽湪debug妯″紡涓嬶紝鐢寵絀洪棿鐨勯熷害鍜屽綰跨▼鐨勫叧緋諱笉澶с傚綰跨▼鏂瑰紡錛岃鐣ュ揩浜庡崟綰跨▼鐨勮繍琛屽疄鐜般?/p>


鍥?

聽聽聽 Malloc鏂瑰紡release妯″紡嫻嬭瘯緇撴灉濡備笅銆?/p>


鍥?

澶氱嚎紼嬬殑浼樺娍錛岄愭笎浣撶幇鍑烘潵銆傚綋鎵ц200w嬈$敵璇峰拰閲婃斁鏃訛紝澶氱嚎紼嬭姣斿崟綰跨▼蹇?500ms宸﹀彸錛岃?錛?0錛?6涓嚎紼嬩箣闂寸殑宸埆騫朵笉鏄壒鍒ぇ銆備笉榪囨暣浣撴劅瑙?涓嚎紼嬬殑榪愯鏃墮棿瑕佺◢寰珮浜?0錛?6涓嚎紼嬬殑鎯呭喌涓嬶紝鎰忓懗鐫榪涚▼涓嚎紼嬭秺澶氱敤鍦ㄧ嚎紼嬪垏鎹笂鐨勬椂闂村氨瓚婂銆?/p>

涓嬮潰鏄痬empool鍦╠ebug嫻嬭瘯緇撴灉


鍥?

聽聽聽 涓嬮潰鏄痬empool鍦╮elease妯″紡涓嬬殑嫻嬭瘯緇撴灉


鍥?

聽聽聽 浠ヤ笂鎵鏈夌粺璁″浘涓墍鐢ㄥ埌鐨勬暟鎹紝鏄垜浠祴璇曚笁嬈″悗騫沖潎鍊箋?/p>

閫氳繃涓婇潰鐨勬祴璇曪紝鍙互鐭ラ亾mempool鐨勬ц兘鍩烘湰涓婅秴榪囩洿鎺alloc鏂瑰紡錛屽湪200w嬈$敵璇峰拰閲婃斁鐨勬儏鍐典笅錛屽崟綰跨▼release鐗堟儏鍐典笅錛宮empool姣旂洿鎺alloc蹇?10鍊嶃傝屽湪4涓嚎紼嬫儏鍐典笅錛宮empool瑕佹瘮鐩存帴malloc蹇?鍊嶅乏鍙熾備互涓婃祴璇曞彧鏄敵璇烽熷害鐨勬祴璇曪紝鍦ㄤ笉鍚岀殑鍘嬪姏鎯呭喌涓嬶紝嫻嬭瘯緇撴灉鍙兘浼?xì)涓嶅悓锛寢箣璇暰l撴灉涔熶笉鑳借鏄巑empool鏂瑰紡姣攎alloc鏂瑰紡紼沖畾銆?br />
聽聽聽 灝忕粨錛氬唴瀛樻睜鍩烘湰涓婃弧瓚沖垵鏈熻璁$洰鏍囷紝浣嗘槸濂瑰茍涓嶆槸瀹岀編鐨勶紝鏈夌己闄鳳紝姣斿,涓嶈兘鐢寵澶т簬256瀛楄妭鐨勫唴瀛樼┖闂達(dá)紝鏃犲唴瀛樿秺鐣屾鏌ワ紝鏃犲唴瀛樿嚜鍔ㄥ洖緙╁姛鑳界瓑銆傚彧鏄繖浜涘鎴戜滑鐨勫獎(jiǎng)鍝嶈繕涓嶆槸閭d箞閲嶈銆?/p>

鐢變簬榪欐槸涓涓叕鍙擱」鐩紝浠g爜娑夊強(qiáng)鐗堟潈錛屾墍浠ヤ笉鑳藉彂甯冨嚭鏉ャ傚鏋滀綘鎯沖仛鑷繁鐨勫唴瀛樻睜錛屽彲浠ヤ笌鎴戣仈緋籾gg_xchj#hotmail.com.



鑳℃剰 2008-04-10 23:26 鍙戣〃璇勮
]]>
鑻ュ共緇忓吀鐨勫瓧絎︿覆鍝堝笇鍑芥暟 http://www.tkk7.com/huyi2006/articles/191348.html鑳℃剰鑳℃剰Mon, 07 Apr 2008 11:57:00 GMThttp://www.tkk7.com/huyi2006/articles/191348.htmlhttp://www.tkk7.com/huyi2006/comments/191348.htmlhttp://www.tkk7.com/huyi2006/articles/191348.html#Feedback0http://www.tkk7.com/huyi2006/comments/commentRss/191348.htmlhttp://www.tkk7.com/huyi2006/services/trackbacks/191348.html闃呰鍏ㄦ枃

鑳℃剰 2008-04-07 19:57 鍙戣〃璇勮
]]>
SQLite鏁版嵁搴撴枃浠舵牸寮忓垎鏋?B鏍?wèi)鐨勫熀鏈l勭粐)http://www.tkk7.com/huyi2006/articles/189050.html鑳℃剰鑳℃剰Thu, 27 Mar 2008 08:37:00 GMThttp://www.tkk7.com/huyi2006/articles/189050.htmlhttp://www.tkk7.com/huyi2006/comments/189050.htmlhttp://www.tkk7.com/huyi2006/articles/189050.html#Feedback0http://www.tkk7.com/huyi2006/comments/commentRss/189050.htmlhttp://www.tkk7.com/huyi2006/services/trackbacks/189050.html姝ゅ垎鏋愮О涓虹畝鏄撶増錛屽洜涓哄悗闈㈣繕璁″垝鍒嗘瀽涓涓洿澶嶆潅鐨勬暟鎹簱鏂囦歡錛屼互娣卞叆鐞嗚ВSQLite鏁版嵁搴揃鏍?wèi)瀹炵幇鐨劸l撴瀯錛屼粠綆鏄撶殑寮濮嬩笉澶變負(fù)涓縐嶅ソ鐨勫涔?fàn)鏂规硶锛寴q欓噷鐨勭畝鏄撶増鏈枃浠舵槸鎸囧ぇ灝忎負(fù)2K瀛楄妭錛屽嵆姣忎釜B鏍?wèi)椤?K瀛楄妭錛屽叡涓や釜B鏍?wèi)椤靛Q岃ˉ鍏呰鏄庝竴涓嬶紝榪欓噷鐨凚鏍?wèi)椤禐鏄寚缁忓吀鏁版嵁缁撴瀯涔︿笂鎵璁茬殑B鏍?wèi)鑺傜偣锛屽湪杩欓噷绉颁负椤垫槸鍥犱负SQLite鍦ㄥ疄鐜癇鏍?wèi)鏃稙鏄娇鐢宓page鐨勬蹇墊潵緇勭粐鐨勩?
鍒涘緩鏂規(guī)硶濡備笅錛?br />CREATE TABLE tbl1(one varchar(10),two varchar(10));
INSERT INTO "tbl1" VALUES('first', 'xxx');
INSERT INTO "tbl1" VALUES('second', 'yyy');

鐒跺悗閫鍑猴紝鐢║ltraEdit鎵撳紑榪欎釜鏁版嵁搴撴枃浠訛細(xì)
00000000h: 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00 ; SQLite format 3.
00000010h: 04 00 01 01 00 40 20 20 00 00 00 07 00 00 00 00 ; .....@聽 ........
00000020h: 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 01 ; ................
00000030h: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ; ................
00000040h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000050h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000060h: 00 00 00 00 0D 00 00 00 01 03 B8 00 03 B8 00 00 ; ..........?.?.
00000070h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
榪欎腑闂撮儴鍒嗗叏閮ㄩ兘鏄浂銆傜渷鍘伙紒
000003a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000003b0h: 00 00 00 00 00 00 00 00 46 01 06 17 15 15 01 71 ; ........F......q
000003c0h: 74 61 62 6C 65 74 62 6C 31 74 62 6C 31 02 43 52 ; tabletbl1tbl1.CR
000003d0h: 45 41 54 45 20 54 41 42 4C 45 20 74 62 6C 31 28 ; EATE TABLE tbl1(
000003e0h: 6F 6E 65 20 76 61 72 63 68 61 72 28 31 30 29 2C ; one varchar(10),
000003f0h: 74 77 6F 20 76 61 72 63 68 61 72 28 31 30 29 29 ; two varchar(10))
聽聽聽聽 榪欐槸絎竴涓狟鏍?wèi)椤靛Q岃繖涓狟鏍?wèi)椤甸噷瀛樻斁浜?jiǎn)琛╯qlite_master鐨勪俊鎭紝榪欏氨鏄疭QLite鏁版嵁搴撶殑緋葷粺琛ㄤ簡(jiǎn)銆?br />涓嬮潰鍒嗘瀽涓涓嬭繖浜涗簩榪涘埗鐨勫叿浣撴兜涔夛紝SQLite緇熶竴閲囩敤澶х娉曟潵琛ㄧず鏁版嵁錛屼笉鍚屼笌涓鑸琲ntel鏈哄櫒鐨勫皬绔硶浜?jiǎn)锛?xì)
鍋忕Щ鍦板潃聽聽 澶у皬聽聽聽 娑典箟
聽0聽聽聽聽聽聽聽聽聽 16聽聽聽聽 "SQLite format 3\000"
16聽聽聽聽聽聽聽聽聽聽 2聽聽聽聽 400H錛?024涓瓧鑺傦紝姣忎釜欏甸潰鐨勫瓧鑺傛暟聽
18聽聽聽聽聽聽聽聽聽聽 2聽聽聽聽 0101H琛ㄧず鐗堟湰鍙瘋(gè)屽凡
20聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽 姣忛〉鏈鐨勬湭鐢ㄧ┖闂達(dá)紝榪欓噷涓洪浂琛ㄧず鏁版嵁閮芥槸浠庢瘡欏墊渶鍚庝竴涓瓧鑺傚紑濮嬪瓨鏀?br />21聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽 鏈澶ц礋杞藉垎鐗囨暟錛岀被浼間笌IP鍒嗙墖錛屼竴欏靛瓨涓嶄笅錛岃鍒嗙墖
22聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽 鏈灝忚礋杞藉垎鐗囨暟
23聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽 鏈灝忓彾瀛愯礋杞藉垎鐗囨暟
24聽聽聽聽聽聽聽聽聽聽 4聽聽聽聽 鏂囦歡淇敼璁℃暟錛岀敤浜庡疄鐜板茍琛岃闂?br />28聽聽聽聽聽聽聽聽聽聽 4聽聽聽聽 淇濈暀鏈敤
32聽聽聽聽聽聽聽聽聽聽 4聽聽聽聽 絎竴涓猣reelist欏?br />36聽聽聽聽聽聽聽聽聽聽 4聽聽聽聽 鏂囦歡涓殑freelist欏墊暟
40聽聽聽聽聽聽聽聽聽 60聽聽聽聽 榪欓噷鏈敤
涓婇潰鐨勮繖涓鐧句釜瀛楄妭縐頒負(fù)鏁版嵁搴撴枃浠剁殑鏂囦歡澶達(dá)紝榪欎釜鏂囦歡澶村彧鏈夌涓涓狟鏍?wèi)椤垫墠鏈夊Q屽悗闈㈢殑姣忎竴涓狟鏍?wèi)椤甸兘娌℃湁杩欎釜缁撴瀯锛屽悗闈㈡瘡涓欏電粨鏋勯兘鐩稿悓錛?br />渚濇涓猴細(xì)B鏍?wèi)椤靛ご缁撴瀯锛孊鏍?wèi)鎸囬拡缁撴瀯锛屾湭鐢ńI洪棿錛孊鏍?wèi)瀹為檯鏁版嵁璐熻浇銆?br />榪欓噷鍜岀粡鍏告暟鎹粨鏋勪功涓婄殑B鏍?wèi)缁撴瀯鏈変簺鍑哄叆锛寴q欓噷鐨勭洰鐨勬槸瀹為檯搴旂敤鏂逛究錛岃屼功涓婄殑緇撴瀯鐩殑鏄В閲婃竻妤欱鏍?wèi)鐨勫師鐞嗐傛墍浠ユ湁浜涗笉鍚岋細(xì)
涓鑸功涓婅鐨勪竴涓狟鏍?wèi)椤电殑缁撴瀯湄?fù)錛氭寚閽堬紝鏁版嵁錛屾寚閽堬紝鏁版嵁錛屾寚閽堬紝鏁版嵁錛?..錛屾寚閽?br />鑰孲QLite緇勭粐涓猴細(xì)鎸囬拡錛屾寚閽堬紝鎸囬拡錛?..錛屾寚閽堬紝鏁版嵁錛屾暟鎹紝...鏁版嵁銆?br />絎竴涓〉闈腑浠?0000060h琛岀浜斾釜瀛楄妭寮濮嬪氨琛ㄧずB鏍?wèi)椤靛ご缁撴瀯浜?jiǎn)錛?br />鍋忕Щ鍦板潃聽聽 澶у皬聽聽聽 娑典箟
0聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽聽 0Dh錛?101b鍚勪綅鎰忎箟涓?: intkey, 2: zerodata, 4: leafdata, 8: leaf
1聽聽聽聽聽聽聽聽聽聽 2聽聽聽聽聽 絎竴涓┖闂插潡鐨勫瓧鑺傚亸縐婚噺錛岃繖閲屼負(fù)0
3聽聽聽聽聽聽聽聽聽聽 2聽聽聽聽聽 01錛岃繖涓狟鏍?wèi)椤靛瓨鏀剧殑璁板綍鏁颁?涓紝鍗崇郴緇熻〃涓彧瀛樻斁浜?jiǎn)涓鏉¤褰曪紝鍥犱負(fù)鍙垱寤轟簡(jiǎn)涓涓〃tbl1
5聽聽聽聽聽聽聽聽聽聽 2聽聽聽聽聽 璐熻澆鍖洪鍦板潃錛?3B8錛屽線涓嬬湅鍒?00003b0h琛岄偅涓?6灝辨槸璐熻澆鍖虹殑寮濮嬩簡(jiǎn)
7聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽聽 鍒嗙墖鏁幫紝榪欓噷鏁版嵁灝戯紝涓嶈冭檻錛屾墍浠ヤ負(fù)0
鍒?000006Bh鍋忕Щ澶凚鏁板ご緇撴潫浜?jiǎn)锛屾帴涓嬫潵鐨劄鏄疊鏁版寚閽堢粨鏋勪簡(jiǎn)錛屾澶勫彧鏈変竴欏癸紝鍙湁涓涓寚閽?3B8h澶勩?br />浠?00003B8h鍋忕Щ鍒扮粨鏉熼兘鏄痵qlite_master琛ㄧ殑瀹為檯鏁版嵁浜?jiǎn)銆傚綋鐒惰繖浜涙暟鎹篃鏄湁緇撴瀯鐨勩?6h琛ㄧず榪欐潯璁板綍鏈?0涓瓧鑺傦紝闄ゅ幓鍏舵湰韜?6錛屽拰鍚庨潰鐨?1鏄儲(chǔ)寮曞錛屾暣涓褰曞垰濂芥槸70涓瓧鑺傦紝01绱㈠紩鍚庨潰閮芥槸payload璐熻澆鏁版嵁浜?jiǎn)銆?br />濡傛硶鐐埗錛屼笅闈㈠垪鍑虹浜屼釜B鏍?wèi)椤靛Q?br />00000400h: 0D 00 00 00 02 03 E5 00 03 F3 03 E5 00 00 00 00 ; ......?.??...
00000410h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
榪欎腑闂撮儴鍒嗗叏閮ㄤ負(fù)闆躲傜渷鍘伙紒
000007d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000007e0h: 00 00 00 00 00 0C 02 03 19 13 73 65 63 6F 6E 64 ; ..........second
000007f0h: 79 79 79 0B 01 03 17 13 66 69 72 73 74 78 78 78 ; yyy.....firstxxx
鐢變簬涓嶆槸絎竴欏碉紝鎵浠ヤ笉瀛樺湪鏂囦歡澶寸殑100涓瓧鑺備簡(jiǎn)錛屼竴寮濮嬪氨鏄疊鏍?wèi)椤靛ご缁撴瀯浜?jiǎn)錛岃繖閲屾湁涓や釜鎸囬拡03F3鍜?3E5錛屽叾瀹冪殑鍜屼笂闈竴鏍楓傛暣涓暟鎹簱綆$悊緋葷粺灝辨槸鍑嗙‘鏃犺鍦板榪欎釜鏂囦歡榪涜綆$悊銆?br />榪涗竴姝ョ殑宸ヤ綔錛氬彧鏈夋暟鎹浜?jiǎn)锛屾墠鑳界湅鍑築鏍?wèi)缁劸l囩殑濂藉錛氭煡鎵撅紝鍒犻櫎錛屽鍔犵殑蹇燂紒鎶婅繖涓枃浠跺彉澶у啀鍒嗘瀽錛?/div>

鑳℃剰 2008-03-27 16:37 鍙戣〃璇勮
]]>琛岀紪杈戝櫒鐨勬暟鎹粨鏋勮繍鐢紞錛嶏紞鍫嗘爤http://www.tkk7.com/huyi2006/articles/160348.html鑳℃剰鑳℃剰Tue, 13 Nov 2007 14:00:00 GMThttp://www.tkk7.com/huyi2006/articles/160348.htmlhttp://www.tkk7.com/huyi2006/comments/160348.htmlhttp://www.tkk7.com/huyi2006/articles/160348.html#Feedback0http://www.tkk7.com/huyi2006/comments/commentRss/160348.htmlhttp://www.tkk7.com/huyi2006/services/trackbacks/160348.html/****************a simple stack**********************************/

#include <stdio.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT聽 10
typedef int bool;
#define TRUE聽聽 1
#define FALSE聽 0
typedef struct
{
聽char *base;
聽char *top;
聽int stacksize;
}sqStack;

//=======================function protoType=============================
bool InitStack(sqStack *stk);
bool DestroyStack(sqStack *stk);
bool ClearStack(sqStack *stk);
bool StackEmpty(sqStack stk);
int聽 StackLength(sqStack stk);
bool GetTop(sqStack stk, char *item);
bool Push(sqStack *s, char item);
bool Pop(sqStack *s, char *item);

bool InitStack(sqStack *stk)
{
聽stk->base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
聽if (!stk->base)
聽return FALSE;
聽stk->top = stk->base;
聽stk->stacksize = STACK_INIT_SIZE;
聽return TRUE;
}

bool GetTop(sqStack stk, char *item)
{
聽if (stk.top == stk.base)
聽return FALSE;
聽item = (stk.top-1);
聽return TRUE;
}

bool Push(sqStack *stk, char item)
{
聽if (stk->top - stk->base >= stk->stacksize)
聽{
聽聽printf("allocate New Mem\n");
聽聽stk->base = (char *)realloc(stk->base, (stk->stacksize + STACKINCREMENT)* sizeof(char));
聽聽if (!stk->base)
聽聽return FALSE;
聽聽stk->top = stk->base + stk->stacksize;
聽聽stk->stacksize += STACKINCREMENT;
聽}
聽*stk->top = item;
聽stk->top++;
聽return TRUE;
}

bool Pop(sqStack *stk, char* item)
{
聽if (stk->top == stk->base)
聽return FALSE;
聽stk->top--;
聽*item = *(stk->top);
聽return TRUE;
}

bool StackEmpty(sqStack stk)
{
聽if (stk.top == stk.base)
聽return TRUE;
聽else
聽return FALSE;
}

bool ClearStack(sqStack *stk)
{
聽stk->top = stk->base;
聽memset(stk->base, 0, sizeof(char));
聽if (stk->top)
聽return TRUE;
聽else
聽return FALSE;
}
bool DestroyStack(sqStack *stk)
{
聽free(stk->base);
聽printf("free memery\n");
聽return TRUE;
}聽聽聽聽

int main(int argc, char** argv)
{
聽sqStack stk;
聽char ch;
聽I(yíng)nitStack(&stk);
聽ch = getchar();
聽while(ch != EOF)
聽{
聽聽while(ch != EOF && ch != '\n')
聽聽{
聽聽聽switch (ch)
聽聽聽{
聽聽聽聽聽 case '#':
聽聽聽聽Pop(&stk, &ch);
聽聽聽聽break;
聽聽聽聽聽 case '@':
聽聽聽聽聽 聽ClearStack(&stk);
聽聽聽聽聽 聽break;
聽聽聽聽聽 case 'q':聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 DestroyStack(&stk);
聽聽聽聽聽聽聽 exit(1);
聽聽聽聽聽聽聽 break;聽聽聽聽聽聽聽
聽聽聽聽聽 default:
聽聽聽聽聽聽 Push(&stk, ch);
聽聽聽}
聽聽聽ch = getchar();
聽聽}
聽聽ClearStack(&stk);
聽聽if (ch != EOF)
聽聽ch = getchar();
聽}
聽DestroyStack(&stk);聽
聽return 1;
}

鐗瑰埆瑕佹敞鎰忕殑鏄爢鏍堢殑涓搷浣滄爤欏剁殑鍊鹼紝鍦ㄥ氨鏄鍐呭瓨鐨勬搷浣?/p>

鑳℃剰 2007-11-13 22:00 鍙戣〃璇勮
]]>
KMP瀛楃涓插尮閰嶇畻娉?/title><link>http://www.tkk7.com/huyi2006/articles/114588.html</link><dc:creator>鑳℃剰</dc:creator><author>鑳℃剰</author><pubDate>Sun, 29 Apr 2007 07:52:00 GMT</pubDate><guid>http://www.tkk7.com/huyi2006/articles/114588.html</guid><wfw:comment>http://www.tkk7.com/huyi2006/comments/114588.html</wfw:comment><comments>http://www.tkk7.com/huyi2006/articles/114588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huyi2006/comments/commentRss/114588.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huyi2006/services/trackbacks/114588.html</trackback:ping><description><![CDATA[ <p>KMP綆楁硶鐨勫叧閿槸鏍規(guī)嵁緇欏畾鐨勬ā寮忎覆W[1,m],瀹氫箟涓涓猲ext鍑芥暟銆俷ext鍑芥暟鍖呭惈浜?jiǎn)妯″紡涓叉湰桧n灞閮ㄥ尮閰嶇殑淇℃伅銆?br />聽聽 KMP綆楁硶鐨勫熀鏈濇兂鏄細(xì)鍋囪鍦ㄦā寮忓尮閰嶇殑榪涚▼涓紝鎵цT[i]鍜學(xué)[j]鐨勫尮閰嶆鏌ャ傝嫢T[i]=W[j]錛屽垯緇х畫媯(gè)鏌[i+1]鍜學(xué)[j+1]鏄惁鍖歸厤銆傝嫢T[i]<>W[j]錛屽垯鍒嗘垚涓ょ鎯呭喌錛氳嫢j=1錛屽垯妯″紡涓插彸縐諱竴浣嶏紝媯(gè)鏌[i+1]鍜學(xué)[1]鏄惁鍖歸厤錛涜嫢1<j<=m錛屽垯妯″紡涓插彸縐籮-next(j)浣嶏紝媯(gè)鏌[i]鍜學(xué)[next(j)]鏄惁鍖歸厤銆傞噸澶嶆榪囩▼鐩村埌j=m鎴杋=n緇撴潫銆?/p> <p>/**************************************<br />聽*<br />聽*聽 KMP瀛楃涓插尮閰嶇畻娉?br />聽*<br />聽*<br />聽**************************************/<br />#include <stdio.h><br />#include <string.h><br />int next[10];<br />void getnext(char *p)<br />{<br />聽int idx_p, len_p, k;<br />聽<br />聽idx_p = 0;<br />聽len_p = strlen(p);<br />聽k = -1;<br />聽next[0] = -1;<br />聽<br />聽while(idx_p < len_p -1)<br />聽{<br />聽 if ((k == -1) || *(p+idx_p) == *(p+k)) <br />聽 {<br />聽聽 idx_p = idx_p + 1;<br />聽聽 k = k + 1;<br />聽聽 next[idx_p] = k; <br />聽 }<br />聽 else<br />聽 {<br />聽聽 k = next[k]; <br />聽 }<br />聽} <br />}<br />int kmp(char *s, char *p)<br />{<br />聽int len_p, len_s, idx_p, idx_s;<br />聽<br />聽len_p = strlen(p);<br />聽len_s = strlen(s);<br />聽idx_p = idx_s = 0;<br />聽<br />聽while ((idx_p < len_p) && (idx_s < len_s))<br />聽{<br />聽 /* 瀛楃鍖歸厤鎴栬呰姣旇緝p涓殑絎竴涓瓧絎?*/<br />聽 if ((idx_p == -1) || *(p+idx_p) == *(s+idx_s))<br />聽 {<br />聽聽 idx_p = idx_p + 1; idx_s = idx_s +1; <br />聽 } <br />聽 else<br />聽 {<br />聽聽 idx_p = next[idx_p]; <br />聽 }<br />聽}<br />聽if (idx_p >= len_p)<br />聽{<br />聽 return (idx_s - len_p); <br />聽}<br />聽else <br />聽{<br />聽 return -1; <br />聽}<br />}<br />int main()<br />{<br />聽int pos, i;<br />聽char s[50] = "abaaaabcabcacb";<br />聽char p[10] = "aaaabca";<br />聽<br />聽getnext(p);<br />聽if ((pos = kmp(s, p)) == -1)<br />聽{<br />聽 fprintf(stderr, "String \"%s\" doesn't contain Pattern \"%s\"!\n", s, p); <br />聽}<br />聽else<br />聽{<br />聽 printf("String \"%s\" contains Pattern \"%s\".\n The position of fisrt occur is %d\n", s, p, pos);<br />聽 printf("%s\n", s);<br />聽 for (i = 0; i < pos; i++)<br />聽聽 printf(" "); <br />聽 printf("%s\n", p);<br />聽}<br />聽return 0; <br />}<br /></p> <img src ="http://www.tkk7.com/huyi2006/aggbug/114588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huyi2006/" target="_blank">鑳℃剰</a> 2007-04-29 15:52 <a href="http://www.tkk7.com/huyi2006/articles/114588.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://www961dd.com" target="_blank">成人A级毛片免费观看AV网站</a>| <a href="http://mt569.com" target="_blank">久久青青草原亚洲av无码</a>| <a href="http://szyxfhm.com" target="_blank">亚洲av日韩av永久无码电影</a>| <a href="http://https357171.com" target="_blank">亚洲精品线路一在线观看</a>| <a href="http://vankiz.com" target="_blank">女人隐私秘视频黄www免费</a>| <a href="http://gdjiayou.com" target="_blank">亚洲性69影院在线观看</a>| <a href="http://468862.com" target="_blank">国产成人无码a区在线观看视频免费</a>| <a href="http://chaoxung.com" target="_blank">a免费毛片在线播放</a>| <a href="http://44od.com" target="_blank">亚洲乱码卡一卡二卡三</a>| <a href="http://vvbbn.com" target="_blank">久久亚洲色一区二区三区</a>| <a href="http://pufenghotel.com" target="_blank">国内精品免费麻豆网站91麻豆</a>| <a href="http://sflhb.com" target="_blank">老子影院午夜伦不卡亚洲</a>| <a href="http://xx2e.com" target="_blank">亚洲日本va午夜中文字幕一区</a>| <a href="http://ti166.com" target="_blank">国产美女无遮挡免费视频</a>| <a href="http://niutextile.com" target="_blank">日本一道本不卡免费</a>| <a href="http://295301.com" target="_blank">成人亚洲国产精品久久</a>| <a href="http://kencery.com" target="_blank">精品亚洲成a人片在线观看少妇</a>| <a href="http://jdv6.com" target="_blank">免费a级黄色毛片</a>| <a href="http://fzgjw.com" target="_blank">www视频免费看</a>| <a href="http://732r.com" target="_blank">中文字幕成人免费高清在线</a>| <a href="http://15831883389.com" target="_blank">亚洲久悠悠色悠在线播放</a>| <a href="http://szzdjl.com" target="_blank">国产亚洲一区二区三区在线观看</a>| <a href="http://lai228.com" target="_blank">夜夜爽免费888视频</a>| <a href="http://863409.com" target="_blank">人妻丰满熟妇无码区免费 </a>| <a href="http://zddzbp.com" target="_blank">亚洲精品无码午夜福利中文字幕 </a>| <a href="http://xf002.com" target="_blank">四虎永久免费影院在线</a>| <a href="http://xieehuomh.com" target="_blank">亚欧免费无码aⅴ在线观看</a>| <a href="http://qvod-player.com" target="_blank">国产成人 亚洲欧洲</a>| <a href="http://taiyu18.com" target="_blank">亚洲熟妇无码久久精品</a>| <a href="http://lanchenews.com" target="_blank">国产精品亚洲玖玖玖在线观看</a>| <a href="http://44168888.com" target="_blank">欧美大尺寸SUV免费</a>| <a href="http://pyjxyey.com" target="_blank">日韩在线不卡免费视频一区</a>| <a href="http://773311h.com" target="_blank">免费VA在线观看无码</a>| <a href="http://dukane1688.com" target="_blank">亚洲一卡2卡3卡4卡5卡6卡</a>| <a href="http://xp189.com" target="_blank">亚洲小视频在线观看</a>| <a href="http://wwwdf221.com" target="_blank">亚洲色无码专区在线观看</a>| <a href="http://szjmlr.com" target="_blank">免费人成无码大片在线观看</a>| <a href="http://dslygc.com" target="_blank">一个人在线观看视频免费</a>| <a href="http://7788mgqb.com" target="_blank">一级毛片在线观看免费</a>| <a href="http://btintemet.com" target="_blank">国产日韩在线视频免费播放</a>| <a href="http://7766ks.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>