锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Text鍖哄煙鐢ㄦ潵鍌ㄥ瓨鎸囦護(instruction)錛屾潵鍛婅瘔紼嬪簭姣忎竴姝ョ殑鎿嶄綔銆侴lobal Data鐢ㄤ簬瀛樻斁鍏ㄥ眬鍙橀噺錛宻tack鐢ㄤ簬瀛樻斁灞閮ㄥ彉閲忥紝heap鐢ㄤ簬瀛樻斁鍔ㄦ佸彉閲?(dynamic variable. 紼嬪簭鍒╃敤malloc緋葷粺璋冪敤錛岀洿鎺ヤ粠鍐呭瓨涓負dynamic variable寮杈熺┖闂?銆?span style="margin: 0px; padding: 0px; color: #ff0000;">Text鍜?span style="margin: 0px; padding: 0px; color: #ff0000;">Global data鍦ㄨ繘紼嬩竴寮濮嬬殑鏃跺欏氨紜畾浜嗭紝騫跺湪鏁翠釜榪涚▼涓繚鎸?span style="margin: 0px; padding: 0px; color: #ff0000;">鍥哄畾澶у皬銆?/span> Stack(鏍?span style="margin: 0px; padding: 0px; color: #000000;">)浠?span style="margin: 0px; padding: 0px; color: #ff0000;">stack frame涓哄崟浣嶃傚綋紼嬪簭璋冪敤鍑芥暟鐨勬椂鍊欙紝姣斿main()鍑芥暟涓皟鐢╥nner()鍑芥暟錛宻tack浼氬悜涓嬪闀夸竴涓猻tack frame銆係tack frame涓瓨鍌ㄨ鍑芥暟鐨?span style="margin: 0px; padding: 0px; color: #ff0000;">鍙傛暟鍜?span style="margin: 0px; padding: 0px; color: #ff0000;">灞閮ㄥ彉閲?/span>錛屼互鍙婅鍑芥暟鐨?span style="margin: 0px; padding: 0px; color: #ff0000;">榪斿洖鍦板潃(return address)銆傛鏃訛紝璁$畻鏈哄皢鎺у埗鏉冧粠main()杞Щ鍒癷nner()錛宨nner()鍑芥暟澶勪簬嬋媧?/span>(active)鐘舵併備綅浜嶴tack鏈涓嬫柟鐨刦rame鍜孏lobal Data灝辨瀯鎴愪簡褰撳墠鐨勭幆澧?context)銆傛縺媧誨嚱鏁板彲浠ヤ粠涓皟鐢ㄩ渶瑕佺殑鍙橀噺銆傚吀鍨嬬殑緙栫▼璇█閮藉彧鍏佽浣犱嬌鐢ㄤ綅浜巗tack鏈涓嬫柟鐨刦rame 錛岃屼笉鍏佽浣犺皟鐢ㄥ叾瀹冪殑frame (榪欎篃絎﹀悎stack緇撴瀯“鍏堣繘鍚庡嚭”鐨勭壒寰併備絾涔熸湁涓浜涜璦鍏佽浣犺皟鐢╯tack鐨勫叾瀹冮儴鍒嗭紝鐩稿綋浜庡厑璁鎬綘鍦ㄨ繍琛宨nner()鍑芥暟鐨勬椂鍊欒皟鐢╩ain()涓0鏄庣殑灞閮ㄥ彉閲忥紝姣斿Pascal)銆傚綋鍑芥暟鍙堣繘涓姝ヨ皟鐢ㄥ彟涓涓嚱鏁扮殑鏃跺欙紝涓涓柊鐨刦rame浼氱戶緇鍔犲埌stack涓嬫柟錛屾帶鍒舵潈杞Щ鍒版柊鐨勫嚱鏁頒腑銆傚綋嬋媧誨嚱鏁?span style="margin: 0px; padding: 0px; color: #ff0000;">榪斿洖鐨勬椂鍊欙紝浼氫粠stack涓?span style="margin: 0px; padding: 0px; color: #ff0000;">寮瑰嚭(pop錛屽氨鏄鍙栧茍鍒犻櫎)璇rame錛屽茍鏍規嵁frame涓褰曠殑榪斿洖鍦板潃錛屽皢鎺у埗鏉冧氦緇欒繑鍥炲湴鍧鎵鎸囧悜鐨勬寚浠?/span>(姣斿浠巌nner()鍑芥暟涓繑鍥烇紝緇х畫鎵цmain()涓祴鍊肩粰main2鐨勬搷浣?銆?/span> 涓嬪浘鏄痵tack鍦ㄨ繍琛岃繃紼嬩腑鐨勫彉鍖栵紝綆ご琛ㄧずstack澧為暱鐨勬柟鍚戯紝姣忎釜鏂瑰潡浠h〃涓涓猻tack frame銆傚紑濮嬬殑鏃跺欐垜浠湁涓涓負main()鏈嶅姟鐨刦rame錛岄殢鐫璋冪敤inner()錛屾垜浠負inner()澧炲姞涓涓猣rame銆傚湪inner()榪斿洖鏃訛紝鎴戜滑鍐嶆鍙湁main()鐨刦rame錛岀洿鍒版渶鍚巑ain()榪斿洖錛屽叾榪斿洖鍦板潃涓虹┖錛屾墍浠ヨ繘紼嬬粨鏉熴?br /> 鍦ㄨ繘紼嬭繍琛岀殑榪囩▼涓紝閫氳繃璋冪敤鍜岃繑鍥炲嚱鏁幫紝鎺у埗鏉?/span>涓嶆柇鍦ㄥ嚱鏁伴棿杞Щ銆傝繘紼嬪彲浠ュ湪璋冪敤鍑芥暟鐨勬椂鍊欙紝鍘熷嚱鏁扮殑stack frame涓繚瀛樻湁鍦ㄦ垜浠寮鏃剁殑鐘舵侊紝騫朵負鏂扮殑鍑芥暟寮杈熸墍闇鐨剆tack frame絀洪棿銆傚湪璋冪敤鍑芥暟榪斿洖鏃訛紝璇ュ嚱鏁扮殑stack frame鎵鍗犳嵁鐨勭┖闂撮殢鐫stack frame鐨勫脊鍑鴻屾竻絀恒傝繘紼嬪啀嬈″洖鍒板師鍑芥暟鐨剆tack frame涓繚瀛樼殑鐘舵侊紝騫舵牴鎹繑鍥炲湴鍧鎵鎸囧悜鐨勬寚浠ょ戶緇墽琛屻備笂闈㈣繃紼嬩笉鏂戶緇紝stack涓嶆柇澧為暱鎴栧噺灝忥紝鐩村埌main()榪斿洖鐨勬椂鍊欙紝stack瀹屽叏娓呯┖錛岃繘紼嬬粨鏉熴?/span> 褰撶▼搴忎腑浣跨敤malloc鐨勬椂鍊欙紝heap(鍫?span style="margin: 0px; padding: 0px; color: #000000;">)浼?/span>鍚戜笂澧為暱錛屽叾澧為暱鐨勯儴鍒嗗氨鎴愪負malloc浠庡唴瀛樹腑鍒嗛厤鐨勭┖闂淬俶alloc寮杈熺殑絀洪棿浼氫竴鐩村瓨鍦紝鐩村埌鎴戜滑鐢╢ree緋葷粺璋冪敤鏉ラ噴鏀撅紝鎴栬呰繘紼嬬粨鏉熴備竴涓粡鍏哥殑閿欒鏄?span style="margin: 0px; padding: 0px; color: #ff0000;">鍐呭瓨娉勬紡(memory leakage), 灝辨槸鎸囨垜浠病鏈夐噴鏀句笉鍐嶄嬌鐢ㄧ殑heap絀洪棿錛屽鑷磆eap涓嶆柇澧為暱錛岃屽唴瀛樺彲鐢ㄧ┖闂翠笉鏂噺灝戙?/span> 鐢變簬stack鍜宧eap鐨勫ぇ灝忓垯浼氶殢鐫榪涚▼鐨勮繍琛屽澶ф垨鑰呭彉灝忥紝褰搒tack鍜宧eap澧為暱鍒頒袱鑰呯浉閬囨椂鍊欙紝涔熷氨鏄唴瀛樼┖闂村浘涓殑钃濊壊鍖哄煙(unused area)瀹屽叏娑堝け鐨勬椂鍊欙紝榪涚▼浼氬嚭鐜?span style="margin: 0px; padding: 0px; color: #ff0000;">鏍堟孩鍑?/span>(stack overflow)鐨勯敊璇紝瀵艱嚧榪涚▼緇堟銆傚湪鐜頒唬璁$畻鏈轟腑錛屽唴鏍鎬竴鑸兘浼氫負榪涚▼鍒嗛厤瓚沖澶氱殑钃濊壊鍖哄煙錛屽鏋滄垜浠嵆鏃舵竻鐞嗙殑璇濓紝stack overflow鏄彲浠ラ伩鍏嶇殑銆備絾鏄紝鍦ㄨ繘琛屼竴浜涚煩闃佃繍綆楃殑鏃跺欙紝鐢變簬鎵闇鐨勫唴瀛樺緢澶э紝渚濈劧鍙兘鍑虹幇stack overflow鐨勬儏鍐點備竴縐嶈В鍐蟲柟寮忔槸澧炲ぇ鍐呮牳鍒嗛厤緇欐瘡涓繘紼嬬殑鍐呭瓨絀洪棿銆傚鏋滀緷鐒朵笉鑳借В鍐抽棶棰樼殑璇濓紝鎴戜滑灝遍渶瑕佸鍔犵墿鐞嗗唴瀛樸?br />
褰撶▼搴忔枃浠惰繍琛屼負榪涚▼鐨勬椂鍊欙紝榪涚▼鍦ㄥ唴瀛樹腑寰楀埌絀洪棿(榪涚▼鑷繁鐨勫皬鎴塊棿)銆傛瘡涓繘紼嬬┖闂存寜鐓у涓嬫柟寮忓垎涓轟笉鍚屽尯鍩?
鍐呭瓨絀洪棿
stack鍙樺寲
鍫嗗拰鏍堢殑鍖哄埆錛?br />
2.1鐢寵鏂瑰紡
stack:
鐢辯郴緇熻嚜鍔ㄥ垎閰嶃?nbsp; 渚嬪錛屽0鏄庡湪鍑芥暟涓竴涓眬閮ㄥ彉閲?nbsp; int b; 緋葷粺鑷姩鍦ㄦ爤涓負b寮杈熺┖
闂?nbsp;
heap:
闇瑕佺▼搴忓憳鑷繁鐢寵錛屽茍鎸囨槑澶у皬錛屽湪c涓璵alloc鍑芥暟
濡俻1 = (char *)malloc(10);
鍦–++涓敤new榪愮畻絎?nbsp;
濡俻2 = new char[10];
浣嗘槸娉ㄦ剰p1銆乸2鏈韓鏄湪鏍堜腑鐨勩?nbsp;
2.2
鐢寵鍚庣郴緇熺殑鍝嶅簲
鏍堬細鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩
鍑恒?nbsp;
鍫嗭細棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛紝褰撶郴緇熸敹鍒扮▼搴忕殑鐢寵鏃訛紝
浼氶亶鍘嗚閾捐〃錛屽鎵劇涓涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃
涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細鍦ㄨ繖鍧楀唴瀛樼┖闂翠腑鐨?nbsp;
棣栧湴鍧澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆?nbsp;
鍙﹀錛岀敱浜庢壘鍒扮殑鍫嗙粨鐐圭殑澶у皬涓嶄竴瀹氭濂界瓑浜庣敵璇風殑澶у皬錛岀郴緇熶細鑷姩鐨勫皢澶氫綑鐨勯偅閮?nbsp;
鍒嗛噸鏂版斁鍏ョ┖闂查摼琛ㄤ腑銆?nbsp;
2.3鐢寵澶у皬鐨勯檺鍒?nbsp;
鏍堬細鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧楄繛緇殑鍐呭瓨鐨勫尯鍩熴傝繖鍙ヨ瘽鐨勬剰
鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈?nbsp;
鐨勮鏄?M錛屾諱箣鏄竴涓紪璇戞椂灝辯‘瀹氱殑甯告暟錛夛紝濡傛灉鐢寵鐨勭┖闂磋秴榪囨爤鐨勫墿浣欑┖闂存椂錛屽皢
鎻愮ずoverflow銆傚洜姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿杈冨皬銆?nbsp;
鍫嗭細鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴傝繖鏄敱浜庣郴緇熸槸鐢ㄩ摼琛ㄦ潵瀛樺偍
鐨勭┖闂插唴瀛樺湴鍧鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝?nbsp;
鍙楅檺浜庤綆楁満緋葷粺涓湁鏁堢殑铏氭嫙鍐呭瓨銆傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?nbsp;
2.4鐢寵鏁堢巼鐨勬瘮杈冿細
鏍堢敱緋葷粺鑷姩鍒嗛厤錛岄熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?nbsp;
鍫嗘槸鐢眓ew鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.
鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄?nbsp;
鐩存帴鍦ㄨ繘紼嬬殑鍦板潃絀洪棿涓繚鐣欎竴鍧楀唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害蹇紝涔熸渶鐏墊椿銆?nbsp;
2.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?nbsp;
鏍堬細 鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲
鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍?nbsp;
鐨勶紝鐒跺悗鏄嚱鏁頒腑鐨勫眬閮ㄥ彉閲忋傛敞鎰忛潤鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?nbsp;
褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴
鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?nbsp;
鍫嗭細涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鐢辯▼搴忓憳瀹夋帓銆?nbsp;
2.6瀛樺彇鏁堢巼鐨勬瘮杈?nbsp;
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?nbsp;
鑰宐bbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱
浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?蹇?
2.7灝忕粨錛?nbsp;
鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細
浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗紝鍙鐐硅彍錛堝彂鍑虹敵璇鳳級銆佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜嗗氨
璧幫紝涓嶅繀鐞嗕細鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛屼粬鐨勫ソ澶勬槸蹇嵎錛屼絾鏄嚜
鐢卞害灝忋?nbsp;
浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲達紝姣旇緝楹葷儲錛屼絾鏄瘮杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱
搴﹀ぇ銆?nbsp; (緇忓吀錛?
]]>
]]>
]]>
]]>
]]>
fork鍙互鍒涘緩涓涓柊鐨勫瓙榪涚▼錛岃皟鐢ㄤ竴嬈★紝榪斿洖涓ゆ錛屼竴嬈¤繑鍥?鍊肩粰瀛愯繘紼嬶紝鍙︿竴嬈¤繑鍥炴柊鐨勫瓙榪涚▼鐨処D緇欑埗榪涚▼ 銆傚瓙榪涚▼鏄埗榪涚▼鐨勫鍒跺搧錛屾嫢鏈夌埗榪涚▼鐨勬暟鎹┖闂淬佸爢鍜屾爤錛岀埗瀛愯繘紼嬪茍涓嶅叡浜瓨鍌ㄧ┖闂達紝濡傛灉姝f枃孌墊槸鍙鐨勶紝閭d箞鐖跺瓙榪涚▼鍏變韓姝f枃孌點?/span>
涓鑸岃█錛宖ork涔嬪悗鏄埗榪涚▼鍏堟墽琛岃繕鏄瓙榪涚▼鍏堟墽琛屾槸涓嶇‘瀹氱殑錛岃繖鍙栧喅浜庡唴鏍哥殑璋冨害綆楁硶銆?/span>
fork鏈変袱縐嶇敤娉曪細
錛?錛変竴涓埗榪涚▼甯屾湜澶嶅埗鑷繁錛屼嬌鐖躲佸瓙榪涚▼鍚屾椂鎵ц涓嶅悓鐨勪唬鐮佹銆?/span>榪欏湪緗戠粶鏈嶅姟榪涚▼涓槸甯歌鐨?#8212;—鐖惰繘紼嬬瓑寰呭鎵樿呯殑鏈嶅姟璇鋒眰銆傚綋榪欑璇鋒眰鍒拌揪鏃訛紝鐖惰繘紼嬭皟鐢?f o r k錛屼嬌瀛愯繘紼嬪鐞嗘璇鋒眰銆傜埗榪涚▼鍒欑戶緇瓑寰呬笅涓涓湇鍔¤姹傘?/span>
1.2
vfork鐢ㄤ簬鍒涘緩涓涓柊鐨勮繘紼嬶紝鑰屾柊鐨勮繘紼嬬殑鐩殑灝辨槸exec涓涓柊紼嬪簭錛寁fork騫朵笉灝嗙埗榪涚▼鐨勫湴鍧絀洪棿澶嶅埗緇欏瓙榪涚▼錛屽洜涓哄瓙榪涚▼浼氱珛鍗寵皟鐢╡xec錛坃exit錛夛紝浜庢槸涔熷氨涓嶄細璁塊棶鍦板潃絀洪棿銆備笉榪囧畠鍦ㄨ皟鐢╡xec鎴朹exit涔嬪墠錛屽畠鍦ㄧ埗榪涚▼鐨勭┖闂翠腑榪愯銆?br />
fork鍒涘緩鐨勫瓙榪涚▼鍏變韓鐖惰繘紼嬬殑鏁版嵁孌點佸爢鏍堟錛泇fork鍒涘緩鐨勫瓙榪涚▼鍏變韓鐖惰繘紼嬬殑鏁版嵁孌點?br />
vfork涓巉ork鐨勫彟涓涓尯鍒槸錛歷fork淇濊瘉瀛愯繘紼嬪厛榪愯錛屽湪瀹冭皟鐢╡xec鎴杄xit涔嬪悗鐖惰繘紼嬫墠鍙兘琚皟搴﹁繍琛岋紝錛堝鏋滃湪璋冪敤榪欎袱涓嚱鏁頒箣鍓嶅瓙榪涚▼渚濊禆浜庣埗榪涚▼鐨勮繘涓姝ュ姩浣滐紝鍒欎細瀵艱嚧姝婚攣錛夈?br />
2.1
exit鍜宊exit閮芥槸姝e父緇堟榪涚▼錛宊exit鐢ㄤ簬vfork鏃剁埗榪涚▼鏈夊彲鑳戒細琚皟搴︼紝瀹冧滑閮戒笉鍚屼簬寮傚父緇堟abort錛屽湪寮傚父緇堟鎯呭喌涓嬶紝鍐呮牳錛堜笉鏄繘紼嬶級浜х敓涓涓寚紺哄叾緇堟寮傚父緇堟鍘熷洜鐨勭粓姝㈢姸鎬併?/span>
]]>
]]>
]]>
]]>