锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鐜嬪拸鍒氾紝2003騫?2鏈?br>
鍐欎綔鏈枃鐨勫垵琛鋒槸鎯沖拰澶у鍒嗕韓鍨冨溇鏀墮泦錛?Garbage Collection 錛夋妧鏈畝鍗曡屾湁瓚g殑鍙戝睍鍙層傚姩絎斾箣鍓嶏紝鎴戠珯鍦ㄧ獥杈癸紝鏈涗簡鏈涙鍦ㄥ皬鍖洪噷瑁呰繍鍨冨溇鐨勬竻媧佽濺銆傚拰鐢熸椿涓幆鍗伐浜轟滑娓呰繍鍨冨溇鐨勫伐浣滅浉浼鹼紝杞歡寮鍙戦噷鐨勫瀮鍦炬敹闆嗗叾瀹炲氨鏄竴縐嶈嚜鍔ㄦ墦鎵拰娓呴櫎鍐呭瓨鍨冨溇鐨勬妧鏈紝瀹冨彲浠ユ湁鏁堥槻鑼冨姩鎬佸唴瀛樺垎閰嶄腑鍙兘鍙戠敓鐨勪袱涓嵄闄╋細鍥犲唴瀛樺瀮鍦捐繃澶氳屽紩鍙戠殑鍐呭瓨鑰楀敖錛堣繖鍜岀敓媧誨瀮鍦懼牭濉炴帓姹$閬撶殑鍗遍櫓騫舵病鏈変粈涔堟湰璐ㄧ殑涓嶅悓錛夛紝浠ュ強涓嶆伆褰撶殑鍐呭瓨閲婃斁鎵閫犳垚鐨勫唴瀛橀潪娉曞紩鐢紙榪欑被浼間簬鎴戜滑鍦ㄧ敓媧諱腑涔板埌浜嗕竴鐡跺凡緇忚繃鏈熶笁騫寸殑鐗涘ザ錛夈?
鎹巻鍙插瀹朵滑浠嬬粛錛屽洓鍗冨騫村墠鐨勫彜鍩冨強浜哄凡緇忓湪鍩庡競閲屽緩璁句簡瀹屽杽鐨勬帓姹″拰鍨冨溇娓呰繍璁炬柦錛屼竴鍗冨騫村墠鐨勪腑鍥戒漢鏇存槸淇瓚浜嗗綋鏃朵笘鐣屼笂淇濇磥鑳藉姏鏈寮虹殑閮藉競 鈥斺旈暱瀹夈備粖澶╋紝褰撴垜浠湪杞歡寮鍙戜腑浣撻獙鑷姩鍨冨溇鏀墮泦鐨勪究鎹蜂笌鑸掗傛椂錛屾垜浠嚦灝戝簲褰撶煡閬擄紝榪欑鎷掔粷鏉備貢銆佽拷姹傛暣媧佺殑“鍨冨溇鏀墮泦”綺劇鍏跺疄鏄漢綾昏嚜鍙や互鏉ュ氨宸茬粡鍏峰浜嗙殑銆?
-------------------------------------------------------------------------------------------------------
鍥藉唴鐨勭▼搴忓憳澶у鏄湪 Java 璇█涓涓嬈℃劅鍙楀埌鍨冨溇鏀墮泦鎶鏈殑宸ㄥぇ欖呭姏鐨勶紝璁稿浜轟篃鍥犳鎶?Java 鍜屽瀮鍦炬敹闆嗙湅鎴愪簡瀵嗕笉鍙垎鐨勬暣浣撱備絾浜嬪疄涓婏紝鍨冨溇鏀墮泦鎶鏈棭鍦?Java 璇█闂笘鍓?30 澶氬勾灝卞凡緇忓彂灞曞拰鎴愮啛璧鋒潵浜嗭紝 Java 璇█鎵鍋氱殑涓嶈繃鏄妸榪欓」紲炲鐨勬妧鏈甫鍒頒簡騫垮ぇ紼嬪簭鍛樿韓杈硅屽凡銆?
濡傛灉涓瀹氳涓哄瀮鍦炬敹闆嗘妧鏈壘涓涓鐢熷厔寮燂紝閭d箞錛?Lisp 璇█鎵嶆槸褰撲箣鏃犳劎鐨勪漢閫夈?1960 騫村墠鍚庤癁鐢熶簬 MIT 鐨?Lisp 璇█鏄涓縐嶉珮搴︿緷璧栦簬鍔ㄦ佸唴瀛樺垎閰嶆妧鏈殑璇█錛?Lisp 涓嚑涔庢墍鏈夋暟鎹兘浠?#8220;琛?#8221;鐨勫艦寮忓嚭鐜幫紝鑰?#8220;琛?#8221;鎵鍗犵敤鐨勭┖闂村垯鏄湪鍫嗕腑鍔ㄦ佸垎閰嶅緱鍒扮殑銆?Lisp 璇█鍏堝ぉ灝卞叿鏈夌殑鍔ㄦ佸唴瀛樼鐞嗙壒鎬ц姹?Lisp 璇█鐨勮璁¤呭繀欏昏В鍐沖爢涓瘡涓涓唴瀛樺潡鐨勮嚜鍔ㄩ噴鏀鵑棶棰橈紙鍚﹀垯錛?Lisp 紼嬪簭鍛樺氨蹇呯劧琚▼搴忎腑涓嶈鍏舵暟鐨?free 鎴?delete 璇彞娣規病錛夛紝榪欑洿鎺ュ鑷翠簡鍨冨溇鏀墮泦鎶鏈殑璇炵敓鍜屽彂灞曗斺旇鍙ラ澶栬瘽錛屼笂澶у鏃訛紝涓浣嶈佸笀鏇懼憡璇夋垜浠紝 Lisp 鏄鐜頒唬杞歡寮鍙戞妧鏈礎鐚渶澶х殑璇█銆傛垜褰撴椂瀵硅繖涓璇存硶涓嶄互涓虹劧錛氬竷婊′簡鍦嗘嫭鍙鳳紝鐪嬩笂鍘誨儚榪峰涓鏍風殑 Lisp 璇█鎬庝箞鑳芥瘮 C 璇█鎴?Pascal 璇█鏇翠紵澶у憿錛熶笉榪囩幇鍦紝褰撴垜鐭ラ亾鍨冨溇鏀墮泦鎶鏈佹暟鎹粨鏋勬妧鏈佷漢宸ユ櫤鑳芥妧鏈佸茍琛屽鐞嗘妧鏈佽櫄鎷熸満鎶鏈佸厓鏁版嵁鎶鏈互鍙婄▼搴忓憳浠崇啛鑳借鐨勮澶氭妧鏈兘璧鋒簮浜?Lisp 璇█鏃訛紝鎴戠壒鍒兂鍚戦偅浣嶈佸笀褰撻潰閬撴瓑錛屽茍鏀跺洖鎴戝綋鏃剁殑騫肩鎯蟲硶銆?
鐭ラ亾浜?Lisp 璇█涓庡瀮鍦炬敹闆嗙殑瀵嗗垏鍏崇郴錛屾垜浠氨涓嶉毦鐞嗚В錛屼負浠涔堝瀮鍦炬敹闆嗘妧鏈殑涓や綅鍏堥┍鑰?J. McCarthy 鍜?M. L. Minsky 鍚屾椂涔熸槸 Lisp 璇█鍙戝睍鍙蹭笂鐨勯噸瑕佷漢鐗╀簡銆?J. McCarthy 鏄?Lisp 涔嬬埗錛屼粬鍦ㄥ彂鏄?Lisp 璇█鐨勫悓鏃朵篃絎竴嬈″畬鏁村湴鎻忚堪浜嗗瀮鍦炬敹闆嗙殑綆楁硶鍜屽疄鐜版柟寮忥紱 M. L. Minsky 鍒欏湪鍙戝睍 Lisp 璇█鐨勮繃紼嬩腑鎴愪負浜嗕粖澶╁ソ鍑犵涓繪祦鍨冨溇鏀墮泦綆楁硶鐨勫鍩轟漢鈥斺斿拰褰撴椂涓嶅皯鎶鏈ぇ甯堢殑緇忓巻鐩鎬技錛?J. McCarthy 鍜?M. L. Minsky 鍦ㄨ澶氫笉鍚岀殑鎶鏈鍩熼噷閮藉彇寰椾簡浠や漢鑹崇盡鐨勬垚灝便備篃璁革紝鍦?1960 騫翠唬閭d釜杞歡寮鍙戝彶涓婄殑鎷撹崚鏃朵唬閲岋紝鎬濈淮鏁忔嵎銆佹剰蹇楀潥瀹氱殑鐮旂┒鑰呮洿瀹規槗鎴愪負鏃犳墍涓嶈兘鐨勮タ閮ㄧ‖姹夊惂銆?
鍦ㄤ簡瑙e瀮鍦炬敹闆嗙畻娉曠殑璧鋒簮涔嬪墠錛屾湁蹇呰鍏堝洖欏句竴涓嬪唴瀛樺垎閰嶇殑涓昏鏂瑰紡銆傛垜浠煡閬擄紝澶у鏁頒富嫻佺殑璇█鎴栬繍琛岀幆澧冮兘鏀寔涓夌鏈鍩烘湰鐨勫唴瀛樺垎閰嶆柟寮忥紝瀹冧滑鍒嗗埆鏄細
涓銆侀潤鎬佸垎閰嶏紙 Static Allocation 錛夛細闈欐佸彉閲忓拰鍏ㄥ眬鍙橀噺鐨勫垎閰嶅艦寮忋傛垜浠彲浠ユ妸闈欐佸垎閰嶇殑鍐呭瓨鐪嬫垚鏄閲岀殑鑰愮敤瀹跺叿銆傞氬父錛屽畠浠棤闇閲婃斁鍜屽洖鏀訛紝鍥犱負娌′漢浼氬ぉ澶╂妸澶ц。鏌滃綋浣滃瀮鍦炬墧鍒扮獥澶栥?
浜屻佽嚜鍔ㄥ垎閰嶏紙 Automatic Allocation 錛夛細鍦ㄦ爤涓負灞閮ㄥ彉閲忓垎閰嶅唴瀛樼殑鏂規硶銆傛爤涓殑鍐呭瓨鍙互闅忕潃浠g爜鍧楅鍑烘椂鐨勫嚭鏍堟搷浣滆鑷姩閲婃斁銆傝繖綾諱技浜庡埌瀹朵腑涓查棬鐨勮瀹紝澶╄壊涓鏅氬氨瑕佸悇鍥炲悇瀹訛紝闄や簡涓埆涓嶈瘑鏃跺姟鑰呬互澶栵紝鎴戜滑涓鑸病蹇呰鎶婂浜烘崋鍦ㄥ瀮鍦捐閲屾壂鍦板嚭闂ㄣ?
涓夈佸姩鎬佸垎閰嶏紙 Dynamic Allocation 錛夛細鍦ㄥ爢涓姩鎬佸垎閰嶅唴瀛樼┖闂翠互瀛樺偍鏁版嵁鐨勬柟寮忋傚爢涓殑鍐呭瓨鍧楀ソ鍍忔垜浠棩甯鎬嬌鐢ㄧ殑槨愬肪綰革紝鐢ㄨ繃浜嗗氨寰楁墧鍒板瀮鍦劇閲岋紝鍚﹀垯灞嬪唴灝變細婊″湴鐙艱棄銆傚儚鎴戣繖鏍風殑鎳掍漢鍋氭ⅵ閮芥兂鏈変竴鍙板鐢ㄦ満鍣ㄤ漢璺熷湪韜竟鎵撴壂鍗敓銆傚湪杞歡寮鍙戜腑錛屽鏋滀綘鎳掑緱閲婃斁鍐呭瓨錛岄偅涔堜綘涔熼渶瑕佷竴鍙扮被浼肩殑鏈哄櫒浜衡斺旇繖鍏跺疄灝辨槸涓涓敱鐗瑰畾綆楁硶瀹炵幇鐨勫瀮鍦炬敹闆嗗櫒銆?
涔熷氨鏄錛屼笅闈㈡彁鍒扮殑鎵鏈夊瀮鍦炬敹闆嗙畻娉曢兘鏄湪紼嬪簭榪愯榪囩▼涓敹闆嗗茍娓呯悊搴熸棫“槨愬肪綰?#8221;鐨勭畻娉曪紝瀹冧滑鐨勬搷浣滃璞℃棦涓嶆槸闈欐佸彉閲忥紝涔熶笉鏄眬閮ㄥ彉閲忥紝鑰屾槸鍫嗕腑鎵鏈夊凡鍒嗛厤鍐呭瓨鍧椼?
-------------------------------------------------------------------------------------------------------
1960 騫翠互鍓嶏紝浜轟滑涓鴻儦鑳庝腑鐨?Lisp 璇█璁捐鍨冨溇鏀墮泦鏈哄埗鏃訛紝絎竴涓兂鍒扮殑綆楁硶鏄紩鐢ㄨ鏁扮畻娉曘傛嬁槨愬肪綰哥殑渚嬪瓙鏉ヨ錛岃繖縐嶇畻娉曠殑鍘熺悊澶ц嚧鍙互鎻忚堪涓猴細
鍗堥鏃訛紝涓轟簡鎶婅剳瀛愰噷紿佺劧璺沖嚭鏉ョ殑璁捐鐏墊劅璁頒笅鏉ワ紝鎴戜粠槨愬肪綰歌涓娊鍑轟竴寮犻宸劇焊錛屾墦綆楀湪涓婇潰鐢誨嚭緋葷粺鏋舵瀯鐨勮摑鍥俱傛寜鐓?#8220;槨愬肪綰鎬嬌鐢ㄨ綰︿箣寮曠敤璁℃暟鐗?#8221;鐨勮姹傦紝鐢誨浘涔嬪墠錛屾垜蹇呴』鍏堝湪槨愬肪綰哥殑涓瑙掑啓涓婅鏁板?1 錛屼互琛ㄧず鎴戝湪浣跨敤榪欏紶槨愬肪綰搞傝繖鏃訛紝濡傛灉浣犱篃鎯崇湅鐪嬫垜鐢葷殑钃濆浘錛岄偅浣犲氨瑕佹妸槨愬肪綰鎬笂鐨勮鏁板煎姞 1 錛屽皢瀹冩敼涓?2 錛岃繖琛ㄦ槑鐩墠鏈?2 涓漢鍦ㄥ悓鏃朵嬌鐢ㄨ繖寮犻宸劇焊錛堝綋鐒訛紝鎴戞槸涓嶄細鍏佽浣犵敤榪欏紶槨愬肪綰告潵鎿﹂薊娑曠殑錛夈備綘鐪嬪畬鍚庯紝蹇呴』鎶婅鏁板煎噺 1 錛岃〃鏄庝綘瀵硅槨愬肪綰哥殑浣跨敤宸茬粡緇撴潫銆傚悓鏍鳳紝褰撴垜灝嗛宸劇焊涓婄殑鍐呭鍏ㄩ儴瑾婂啓鍒扮瑪璁版湰涓婁箣鍚庯紝鎴戜篃浼氳嚜瑙夊湴鎶婇宸劇焊涓婄殑璁℃暟鍊煎噺 1 銆傛鏃訛紝涓嶅嚭鎰忓鐨勮瘽錛岃繖寮犻宸劇焊涓婄殑璁℃暟鍊煎簲褰撴槸 0 錛屽畠浼氳鍨冨溇鏀墮泦鍣ㄢ斺斿亣璁鵑偅鏄竴涓笓闂ㄨ礋璐f墦鎵崼鐢熺殑鏈哄櫒浜衡斺旀崱璧鋒潵鎵斿埌鍨冨溇綆遍噷錛屽洜涓哄瀮鍦炬敹闆嗗櫒鐨勬儫涓浣垮懡灝辨槸鎵懼埌鎵鏈夎鏁板間負 0 鐨勯宸劇焊騫舵竻鐞嗗畠浠?
寮曠敤璁℃暟綆楁硶鐨勪紭鐐瑰拰緙洪櫡鍚屾牱鏄庢樉銆傝繖涓綆楁硶鍦ㄦ墽琛屽瀮鍦炬敹闆嗕換鍔℃椂閫熷害杈冨揩錛屼絾綆楁硶瀵圭▼搴忎腑姣忎竴嬈″唴瀛樺垎閰嶅拰鎸囬拡鎿嶄綔鎻愬嚭浜嗛澶栫殑瑕佹眰錛堝鍔犳垨鍑忓皯鍐呭瓨鍧楃殑寮曠敤璁℃暟錛夈傛洿閲嶈鐨勬槸錛屽紩鐢ㄨ鏁扮畻娉曟棤娉曟紜噴鏀懼驚鐜紩鐢ㄧ殑鍐呭瓨鍧楋紝瀵規錛?D. Hillis 鏈変竴孌甸瓚h岀簿杈熺殑璁鴻堪錛?
涓澶╋紝涓涓鐢熻蛋鍒?Moon 闈㈠墠璇達細“鎴戠煡閬撳浣曡璁′竴涓洿濂界殑鍨冨溇鏀墮泦鍣ㄤ簡銆傛垜浠繀欏昏褰曟寚鍚戞瘡涓粨鐐圭殑鎸囬拡鏁扮洰銆?#8221; Moon 鑰愬績鍦扮粰榪欎綅瀛︾敓璁蹭簡涓嬮潰榪欎釜鏁呬簨錛?#8220;涓澶╋紝涓涓鐢熻蛋鍒?Moon 闈㈠墠璇達細‘鎴戠煡閬撳浣曡璁′竴涓洿濂界殑鍨冨溇鏀墮泦鍣ㄤ簡……’”
D. Hillis 鐨勬晠浜嬪拰鎴戜滑灝忔椂鍊欏父璇寸殑“浠庡墠鏈夊駭灞憋紝灞變笂鏈変釜搴欙紝搴欓噷鏈変釜鑰佸拰灝?#8221;鐨勬晠浜嬫湁寮傛洸鍚屽伐涔嬪銆傝繖璇存槑錛屽崟鏄嬌鐢ㄥ紩鐢ㄨ鏁扮畻娉曡繕涓嶈凍浠ヨВ鍐沖瀮鍦炬敹闆嗕腑鐨勬墍鏈夐棶棰樸傛鍥犱負濡傛錛屽紩鐢ㄨ鏁扮畻娉曚篃甯稿父琚爺絀惰呬滑鎺掗櫎鍦ㄧ嫮涔夌殑鍨冨溇鏀墮泦綆楁硶涔嬪銆傚綋鐒訛紝浣滀負涓縐嶆渶綆鍗曘佹渶鐩磋鐨勮В鍐蟲柟妗堬紝寮曠敤璁℃暟綆楁硶鏈韓鍏鋒湁鍏朵笉鍙浛浠g殑浼樿秺鎬с?1980 騫翠唬鍓嶅悗錛?D. P. Friedman 錛?D. S. Wise 錛?H. G. Baker 絳変漢瀵瑰紩鐢ㄨ鏁扮畻娉曡繘琛屼簡鏁版鏀硅繘錛岃繖浜涙敼榪涗嬌寰楀紩鐢ㄨ鏁扮畻娉曞強鍏跺彉縐嶏紙濡傚歡榪熻鏁扮畻娉曠瓑錛夊湪綆鍗曠殑鐜涓嬶紝鎴栨槸鍦ㄤ竴浜涚患鍚堜簡澶氱綆楁硶鐨勭幇浠e瀮鍦炬敹闆嗙郴緇熶腑浠嶇劧鍙互涓灞曡韓鎵嬨?
-------------------------------------------------------------------------------------------------------
絎竴縐嶅疄鐢ㄥ拰瀹屽杽鐨勫瀮鍦炬敹闆嗙畻娉曟槸 J. McCarthy 絳変漢鍦?1960 騫存彁鍑哄茍鎴愬姛鍦板簲鐢ㄤ簬 Lisp 璇█鐨勬爣璁幫紞娓呴櫎綆楁硶銆備粛浠ラ宸劇焊涓轟緥錛屾爣璁幫紞娓呴櫎綆楁硶鐨勬墽琛岃繃紼嬫槸榪欐牱鐨勶細
鍗堥榪囩▼涓紝槨愬巺閲岀殑鎵鏈変漢閮芥牴鎹嚜宸辯殑闇瑕佸彇鐢ㄩ宸劇焊銆傚綋鍨冨溇鏀墮泦鏈哄櫒浜烘兂鏀墮泦搴熸棫槨愬肪綰哥殑鏃跺欙紝瀹冧細璁╂墍鏈夌敤槨愮殑浜哄厛鍋滀笅鏉ワ紝鐒跺悗錛屼緷嬈¤闂鍘呴噷鐨勬瘡涓涓漢錛?#8220;浣犳鍦ㄧ敤槨愬肪綰稿悧錛熶綘鐢ㄧ殑鏄摢涓寮犻宸劇焊錛?#8221;鏈哄櫒浜烘牴鎹瘡涓漢鐨勫洖絳斿皢浜轟滑姝e湪浣跨敤鐨勯宸劇焊鐢諱笂璁板彿銆傝闂繃紼嬬粨鏉熷悗錛屾満鍣ㄤ漢鍦ㄩ鍘呴噷瀵繪壘鎵鏈夋暎钀藉湪槨愭涓婁笖娌℃湁璁板彿鐨勯宸劇焊錛堣繖浜涙樉鐒墮兘鏄敤榪囩殑搴熸棫槨愬肪綰革級錛屾妸瀹冧滑緇熺粺鎵斿埌鍨冨溇綆遍噷銆?
姝e鍏跺悕縐版墍鏆楃ず鐨勯偅鏍鳳紝鏍囪錛嶆竻闄ょ畻娉曠殑鎵ц榪囩▼鍒嗕負“鏍囪”鍜?#8220;娓呴櫎”涓ゅぇ闃舵銆傝繖縐嶅垎姝ユ墽琛岀殑鎬濊礬濂犲畾浜嗙幇浠e瀮鍦炬敹闆嗙畻娉曠殑鎬濇兂鍩虹銆備笌寮曠敤璁℃暟綆楁硶涓嶅悓鐨勬槸錛屾爣璁幫紞娓呴櫎綆楁硶涓嶉渶瑕佽繍琛岀幆澧冪洃嫻嬫瘡涓嬈″唴瀛樺垎閰嶅拰鎸囬拡鎿嶄綔錛岃屽彧瑕佸湪“鏍囪”闃舵涓窡韙瘡涓涓寚閽堝彉閲忕殑鎸囧悜鈥斺旂敤綾諱技鎬濊礬瀹炵幇鐨勫瀮鍦炬敹闆嗗櫒涔熷父琚悗浜虹粺縐頒負璺熻釜鏀墮泦鍣紙 Tracing Collector 錛?
浼撮殢鐫 Lisp 璇█鐨勬垚鍔燂紝鏍囪錛嶆竻闄ょ畻娉曚篃鍦ㄥぇ澶氭暟鏃╂湡鐨?Lisp 榪愯鐜涓ぇ鏀懼紓褰┿傚敖綆℃渶鍒濈増鏈殑鏍囪錛嶆竻闄ょ畻娉曞湪浠婂ぉ鐪嬫潵榪樺瓨鍦ㄦ晥鐜囦笉楂橈紙鏍囪鍜屾竻闄ゆ槸涓や釜鐩稿綋鑰楁椂鐨勮繃紼嬶級絳夎澶氱己闄鳳紝浣嗗湪鍚庨潰鐨勮璁轟腑錛屾垜浠彲浠ョ湅鍒幫紝鍑犱箮鎵鏈夌幇浠e瀮鍦炬敹闆嗙畻娉曢兘鏄爣璁幫紞娓呴櫎鎬濇兂鐨勫歡緇紝浠呮涓鐐癸紝 J. McCarthy 絳変漢鍦ㄥ瀮鍦炬敹闆嗘妧鏈柟闈㈢殑璐$尞灝變笣姣笉浜氫簬浠栦滑鍦?Lisp 璇█涓婄殑鎴愬氨浜嗐?
-------------------------------------------------------------------------------------------------------
涓轟簡瑙e喅鏍囪錛嶆竻闄ょ畻娉曞湪鍨冨溇鏀墮泦鏁堢巼鏂歸潰鐨勭己闄鳳紝 M. L. Minsky 浜?1963 騫村彂琛ㄤ簡钁楀悕鐨勮鏂?#8220;涓縐嶄嬌鐢ㄥ弻瀛樺偍鍖虹殑 Lisp 璇█鍨冨溇鏀墮泦鍣紙 A LISP Garbage Collector Algorithm Using Serial Secondary Storage 錛?#8221;銆?M. L. Minsky 鍦ㄨ璁烘枃涓弿榪扮殑綆楁硶琚漢浠О涓哄鍒剁畻娉曪紝瀹冧篃琚?M. L. Minsky 鏈漢鎴愬姛鍦板紩鍏ュ埌浜?Lisp 璇█鐨勪竴涓疄鐜扮増鏈腑銆?
澶嶅埗綆楁硶鍒嚭蹇冭鍦板皢鍫嗙┖闂翠竴鍒嗕負浜岋紝騫朵嬌鐢ㄧ畝鍗曠殑澶嶅埗鎿嶄綔鏉ュ畬鎴愬瀮鍦炬敹闆嗗伐浣滐紝榪欎釜鎬濊礬鐩稿綋鏈夎叮銆傚熺敤槨愬肪綰哥殑姣斿柣錛屾垜浠彲浠ヨ繖鏍風悊瑙?M. L. Minsky 鐨勫鍒剁畻娉曪細
槨愬巺琚瀮鍦炬敹闆嗘満鍣ㄤ漢鍒嗘垚鍗楀尯鍜屽寳鍖轟袱涓ぇ灝忓畬鍏ㄧ浉鍚岀殑閮ㄥ垎銆傚崍槨愭椂錛屾墍鏈変漢閮藉厛鍦ㄥ崡鍖虹敤槨愶紙鍥犱負絀洪棿鏈夐檺錛岀敤槨愪漢鏁拌嚜鐒朵篃灝嗗噺灝戜竴鍗婏級錛岀敤槨愭椂鍙互闅忔剰浣跨敤槨愬肪綰搞傚綋鍨冨溇鏀墮泦鏈哄櫒浜鴻涓烘湁蹇呰鍥炴敹搴熸棫槨愬肪綰告椂錛屽畠浼氳姹傛墍鏈夌敤槨愯呬互鏈蹇殑閫熷害浠庡崡鍖鴻漿縐誨埌鍖楀尯錛屽悓鏃墮殢韜惡甯﹁嚜宸辨鍦ㄤ嬌鐢ㄧ殑槨愬肪綰搞傜瓑鎵鏈変漢閮借漿縐誨埌鍖楀尯涔嬪悗錛屽瀮鍦炬敹闆嗘満鍣ㄤ漢鍙綆鍗曞湴鎶婂崡鍖轟腑鎵鏈夋暎钀界殑槨愬肪綰告墧榪涘瀮鍦劇灝辯畻瀹屾垚浠誨姟浜嗐備笅涓嬈″瀮鍦炬敹闆嗙殑宸ヤ綔榪囩▼涔熷ぇ鑷寸被浼鹼紝鎯熶竴鐨勪笉鍚屽彧鏄漢浠殑杞Щ鏂瑰悜鍙樻垚浜嗕粠鍖楀尯鍒板崡鍖恒傚姝ゅ驚鐜線澶嶏紝姣忔鍨冨溇鏀墮泦閮藉彧闇綆鍗曞湴杞Щ錛堜篃灝辨槸澶嶅埗錛変竴嬈★紝鍨冨溇鏀墮泦閫熷害鏃犱笌浼︽瘮鈥斺斿綋鐒訛紝瀵逛簬鐢ㄩ鑰呭線榪斿娉簬鍗楀寳涓ゅ尯涔嬮棿鐨勮緵鍔籌紝鍨冨溇鏀墮泦鏈哄櫒浜烘槸鍐充笉浼氭祦闇插嚭涓濇鎬滄偗鐨勩?
M. L. Minsky 鐨勫彂鏄庣粷瀵圭畻寰椾笂涓縐嶅鎬濆鎯熾傚垎鍖恒佸鍒剁殑鎬濊礬涓嶄粎澶у箙鎻愰珮浜嗗瀮鍦炬敹闆嗙殑鏁堢巼錛岃屼笖涔熷皢鍘熸湰綣佺悍澶嶆潅鐨勫唴瀛樺垎閰嶇畻娉曞彉寰楀墠鎵鏈湁鍦扮畝鏄庡拰鎵艱錛堟棦鐒舵瘡嬈″唴瀛樺洖鏀墮兘鏄鏁翠釜鍗婂尯鐨勫洖鏀訛紝鍐呭瓨鍒嗛厤鏃朵篃灝變笉鐢ㄨ冭檻鍐呭瓨紕庣墖絳夊鏉傛儏鍐碉紝鍙縐誨姩鍫嗛《鎸囬拡錛屾寜欏哄簭鍒嗛厤鍐呭瓨灝卞彲浠ヤ簡錛夛紝榪欑畝鐩存槸涓榪癸紒涓嶈繃錛屼換浣曞榪圭殑鍑虹幇閮芥湁涓瀹氱殑浠d環錛屽湪鍨冨溇鏀墮泦鎶鏈腑錛屽鍒剁畻娉曟彁楂樻晥鐜囩殑浠d環鏄漢涓哄湴灝嗗彲鐢ㄥ唴瀛樼緝灝忎簡涓鍗娿傚疄璇濆疄璇達紝榪欎釜浠d環鏈厤涔熷お楂樹簡涓浜涖?
鏃犺浼樼己鐐瑰浣曪紝澶嶅埗綆楁硶鍦ㄥ疄璺典腑閮借幏寰椾簡鍙互涓庢爣璁幫紞娓呴櫎綆楁硶鐩告瘮鎷熺殑鎴愬姛銆傞櫎浜?M. L. Minsky 鏈漢鍦?Lisp 璇█涓殑宸ヤ綔浠ュ錛屼粠 1960 騫翠唬鏈埌 1970 騫翠唬鍒濓紝 R. R. Fenichel 鍜?J. C. Yochelson 絳変漢涔熺浉緇у湪 Lisp 璇█鐨勪笉鍚屽疄鐜頒腑瀵瑰鍒剁畻娉曡繘琛屼簡鏀硅繘錛?S. Arnborg 鏇存槸鎴愬姛鍦板皢澶嶅埗綆楁硶搴旂敤鍒頒簡 Simula 璇█涓?
鑷蟲錛屽瀮鍦炬敹闆嗘妧鏈殑涓夊ぇ浼犵粺綆楁硶鈥斺斿紩鐢ㄨ鏁扮畻娉曘佹爣璁幫紞娓呴櫎綆楁硶鍜屽鍒剁畻娉曗斺旈兘宸插湪 1960 騫村墠鍚庣浉緇ч棶涓栵紝涓夌綆楁硶鍚勬湁鎵闀匡紝涔熼兘瀛樺湪鑷村懡鐨勭己闄楓備粠 1960 騫翠唬鍚庢湡寮濮嬶紝鐮旂┒鑰呯殑涓昏綺懼姏閫愭笎杞悜瀵硅繖涓夌浼犵粺綆楁硶榪涜鏀硅繘鎴栨暣鍚堬紝浠ユ壃闀塊伩鐭紝閫傚簲紼嬪簭璁捐璇█鍜岃繍琛岀幆澧冨鍨冨溇鏀墮泦鐨勬晥鐜囧拰瀹炴椂鎬ф墍鎻愬嚭鐨勬洿楂樿姹傘?
-------------------------------------------------------------------------------------------------------
浠?1970 騫翠唬寮濮嬶紝闅忕潃縐戝鐮旂┒鍜屽簲鐢ㄥ疄璺電殑涓嶆柇娣卞叆錛屼漢浠愭笎鎰忚瘑鍒幫紝涓涓悊鎯崇殑鍨冨溇鏀墮泦鍣ㄤ笉搴斿湪榪愯鏃跺鑷村簲鐢ㄧ▼搴忕殑鏆傚仠錛屼笉搴旈澶栧崰鐢ㄥぇ閲忕殑鍐呭瓨絀洪棿鍜?CPU 璧勬簮錛岃屼笁縐嶄紶緇熺殑鍨冨溇鏀墮泦綆楁硶閮芥棤娉曟弧瓚寵繖浜涜姹傘備漢浠繀欏繪彁鍑烘洿鏂扮殑綆楁硶鎴栨濊礬錛屼互瑙e喅瀹炶返涓鍒扮殑璇稿闅鵑銆傚綋鏃訛紝鐮旂┒鑰呯殑鍔姏鐩爣鍖呮嫭錛?
絎竴錛屾彁楂樺瀮鍦炬敹闆嗙殑鏁堢巼銆備嬌鐢ㄦ爣璁幫紞娓呴櫎綆楁硶鐨勫瀮鍦炬敹闆嗗櫒鍦ㄥ伐浣滄椂瑕佹秷鑰楃浉褰撳鐨?CPU 璧勬簮銆傛棭鏈熺殑 Lisp 榪愯鐜鏀墮泦鍐呭瓨鍨冨溇鐨勬椂闂寸珶鍗犲埌浜嗙郴緇熸昏繍琛屾椂闂寸殑 40% 錛佲斺斿瀮鍦炬敹闆嗘晥鐜囩殑浣庝笅鐩存帴閫犲氨浜?Lisp 璇█鍦ㄦ墽琛岄熷害鏂歸潰鐨勫潖鍚嶅0錛涚洿鍒頒粖澶╋紝璁稿浜鴻繕鏉′歡鍙嶅皠浼煎湴璇互涓烘墍鏈?Lisp 紼嬪簭閮藉鎱㈡棤姣斻?
絎簩錛屽噺灝戝瀮鍦炬敹闆嗘椂鐨勫唴瀛樺崰鐢ㄣ傝繖涓闂涓昏鍑虹幇鍦ㄥ鍒剁畻娉曚腑銆傚敖綆″鍒剁畻娉曞湪鏁堢巼涓婅幏寰椾簡璐ㄧ殑紿佺牬錛屼絾鐗虹壊涓鍗婂唴瀛樼┖闂寸殑浠d環浠嶇劧鏄法澶х殑銆傚湪璁$畻鏈哄彂灞曠殑鏃╂湡錛屽湪鍐呭瓨浠鋒牸浠?KB 璁$畻鐨勬棩瀛愰噷錛屾氮璐瑰鎴風殑涓鍗婂唴瀛樼┖闂寸畝鐩村氨鏄湪鍙樼浉鏁茶瘓鎴栨嫤璺墦鍔?
絎笁錛屽鎵懼疄鏃剁殑鍨冨溇鏀墮泦綆楁硶銆傛棤璁烘墽琛屾晥鐜囧浣曪紝涓夌浼犵粺鐨勫瀮鍦炬敹闆嗙畻娉曞湪鎵ц鍨冨溇鏀墮泦浠誨姟鏃墮兘蹇呴』鎵撴柇紼嬪簭鐨勫綋鍓嶅伐浣溿傝繖縐嶅洜鍨冨溇鏀墮泦鑰岄犳垚鐨勫歡鏃舵槸璁稿紼嬪簭錛岀壒鍒槸鎵ц鍏抽敭浠誨姟鐨勭▼搴忔病鏈夊姙娉曞蹇嶇殑銆傚浣曞浼犵粺綆楁硶榪涜鏀硅繘錛屼互渚垮疄鐜頒竴縐嶅湪鍚庡彴鎮勬倓鎵ц錛屼笉褰卞搷鈥斺旀垨鑷沖皯鐪嬩笂鍘諱笉褰卞搷鈥斺斿綋鍓嶈繘紼嬬殑瀹炴椂鍨冨溇鏀墮泦鍣紝榪欐樉鐒舵槸涓浠舵洿鍏鋒寫鎴樻х殑宸ヤ綔銆?
鐮旂┒鑰呬滑鎺㈠鏈煡棰嗗煙鐨勫喅蹇冨拰鐮旂┒宸ヤ綔鐨勮繘灞曢熷害鍚屾牱浠や漢鎯婂錛氬湪 1970 騫翠唬鍒?1980 騫翠唬鐨勭煭鐭崄鍑犲勾涓紝涓澶ф壒鍦ㄥ疄鐢ㄧ郴緇熶腑琛ㄧ幇浼樺紓鐨勬柊綆楁硶鍜屾柊鎬濊礬鑴遍鑰屽嚭銆傛鏄洜涓烘湁浜嗚繖浜涙棩瓚嬫垚鐔熺殑鍨冨溇鏀墮泦綆楁硶錛屼粖澶╃殑鎴戜滑鎵嶈兘鍦?Java 鎴?.NET 鎻愪緵鐨勮繍琛岀幆澧冧腑闅忓績鎵嬈插湴鍒嗛厤鍐呭瓨鍧楋紝鑰屼笉蹇呮媴蹇冪┖闂撮噴鏀炬椂鐨勯闄┿?
-------------------------------------------------------------------------------------------------------
鏍囪錛嶆暣鐞嗙畻娉曟槸鏍囪錛嶆竻闄ょ畻娉曞拰澶嶅埗綆楁硶鐨勬湁鏈虹粨鍚堛傛妸鏍囪錛嶆竻闄ょ畻娉曞湪鍐呭瓨鍗犵敤涓婄殑浼樼偣鍜屽鍒剁畻娉曞湪鎵ц鏁堢巼涓婄殑鐗歸暱緇煎悎璧鋒潵錛岃繖鏄墍鏈変漢閮藉笇鏈涚湅鍒扮殑緇撴灉銆備笉榪囷紝涓ょ鍨冨溇鏀墮泦綆楁硶鐨勬暣鍚堝茍涓嶅儚 1 鍔?1 絳変簬 2 閭f牱綆鍗曪紝鎴戜滑蹇呴』寮曞叆涓浜涘叏鏂扮殑鎬濊礬銆?1970 騫村墠鍚庯紝 G. L. Steele 錛?C. J. Cheney 鍜?D. S. Wise 絳夌爺絀惰呴檰緇壘鍒頒簡姝g‘鐨勬柟鍚戯紝鏍囪錛嶆暣鐞嗙畻娉曠殑杞粨涔熼愭笎娓呮櫚浜嗚搗鏉ワ細
鍦ㄦ垜浠啛鎮夌殑槨愬巺閲岋紝榪欎竴嬈★紝鍨冨溇鏀墮泦鏈哄櫒浜轟笉鍐嶆妸槨愬巺鍒嗘垚涓や釜鍗楀寳鍖哄煙浜嗐傞渶瑕佹墽琛屽瀮鍦炬敹闆嗕換鍔℃椂錛屾満鍣ㄤ漢鍏堟墽琛屾爣璁幫紞娓呴櫎綆楁硶鐨勭涓涓楠わ紝涓烘墍鏈変嬌鐢ㄤ腑鐨勯宸劇焊鐢誨ソ鏍囪錛岀劧鍚庯紝鏈哄櫒浜哄懡浠ゆ墍鏈夊氨槨愯呭甫涓婃湁鏍囪鐨勯宸劇焊鍚戦鍘呯殑鍗楅潰闆嗕腑錛屽悓鏃舵妸娌℃湁鏍囪鐨勫簾鏃ч宸劇焊鎵斿悜槨愬巺鍖楅潰銆傝繖鏍蜂竴鏉ワ紝鏈哄櫒浜哄彧娑堢珯鍦ㄩ鍘呭寳闈紝鎬鎶卞瀮鍦劇錛岃繋鎺ユ墤闈㈣屾潵鐨勫簾鏃ч宸劇焊灝辮浜嗐?
瀹為獙琛ㄦ槑錛屾爣璁幫紞鏁寸悊綆楁硶鐨勬諱綋鎵ц鏁堢巼楂樹簬鏍囪錛嶆竻闄ょ畻娉曪紝鍙堜笉鍍忓鍒剁畻娉曢偅鏍烽渶瑕佺壓鐗蹭竴鍗婄殑瀛樺偍絀洪棿錛岃繖鏄劇劧鏄竴縐嶉潪甯哥悊鎯崇殑緇撴灉銆傚湪璁稿鐜頒唬鐨勫瀮鍦炬敹闆嗗櫒涓紝浜轟滑閮戒嬌鐢ㄤ簡鏍囪錛嶆暣鐞嗙畻娉曟垨鍏舵敼榪涚増鏈?
-------------------------------------------------------------------------------------------------------
瀵瑰疄鏃跺瀮鍦炬敹闆嗙畻娉曠殑鐮旂┒鐩存帴瀵艱嚧浜嗗閲忔敹闆嗙畻娉曠殑璇炵敓銆?
鏈鍒濓紝浜轟滑鍏充簬瀹炴椂鍨冨溇鏀墮泦鐨勬兂娉曟槸榪欐牱鐨勶細涓轟簡榪涜瀹炴椂鐨勫瀮鍦炬敹闆嗭紝鍙互璁捐涓涓榪涚▼鐨勮繍琛岀幆澧冿紝姣斿鐢ㄤ竴涓繘紼嬫墽琛屽瀮鍦炬敹闆嗗伐浣滐紝鍙︿竴涓繘紼嬫墽琛岀▼搴忎唬鐮併傝繖鏍蜂竴鏉ワ紝鍨冨溇鏀墮泦宸ヤ綔鐪嬩笂鍘誨氨浠夸經鏄湪鍚庡彴鎮勬倓瀹屾垚鐨勶紝涓嶄細鎵撴柇紼嬪簭浠g爜鐨勮繍琛屻?
鍦ㄦ敹闆嗛宸劇焊鐨勪緥瀛愪腑錛岃繖涓鎬濊礬鍙互琚悊瑙d負錛氬瀮鍦炬敹闆嗘満鍣ㄤ漢鍦ㄤ漢浠敤槨愮殑鍚屾椂瀵繪壘搴熷純鐨勯宸劇焊騫跺皢瀹冧滑鎵斿埌鍨冨溇綆遍噷銆傝繖涓湅浼肩畝鍗曠殑鎬濊礬浼氬湪璁捐鍜屽疄鐜版椂紕頒笂榪涚▼闂村啿紿佺殑闅鵑銆傛瘮濡傝錛屽鏋滃瀮鍦炬敹闆嗚繘紼嬪寘鎷爣璁板拰娓呴櫎涓や釜宸ヤ綔闃舵錛岄偅涔堬紝鍨冨溇鏀墮泦鍣ㄥ湪絎竴闃舵涓緵杈涜嫤鑻︽爣璁板嚭鐨勭粨鏋滃緢鍙兘琚彟涓涓繘紼嬩腑鐨勫唴瀛樻搷浣滀唬鐮佷慨鏀瑰緱闈㈢洰鍏ㄩ潪錛屼互鑷充簬絎簩闃舵鐨勫伐浣滄病鏈夊姙娉曞紑灞曘?
M. L. Minsky 鍜?D. E. Knuth 瀵瑰疄鏃跺瀮鍦炬敹闆嗚繃紼嬩腑鐨勬妧鏈毦鐐硅繘琛屼簡鏃╂湡鐨勭爺絀訛紝 G. L. Steele 浜?1975 騫村彂琛ㄤ簡棰樹負“澶氳繘紼嬫暣鐞嗙殑鍨冨溇鏀墮泦錛?Multiprocessing compactifying garbage collection 錛?#8221;鐨勮鏂囷紝鎻忚堪浜嗕竴縐嶈鍚庝漢縐頒負“ Minsky-Knuth-Steele 綆楁硶”鐨勫疄鏃跺瀮鍦炬敹闆嗙畻娉曘?E. W. Dijkstra 錛?L. Lamport 錛?R. R. Fenichel 鍜?J. C. Yochelson 絳変漢涔熺浉緇у湪姝ら鍩熷仛鍑轟簡鍚勮嚜鐨勮礎鐚?1978 騫達紝 H. G. Baker 鍙戣〃浜?#8220;涓茶璁$畻鏈轟笂鐨勫疄鏃惰〃澶勭悊鎶鏈紙 List Processing in Real Time on a Serial Computer 錛?#8221;涓鏂囷紝緋葷粺闃愯堪浜嗗榪涚▼鐜涓嬬敤浜庡瀮鍦炬敹闆嗙殑澧為噺鏀墮泦綆楁硶銆?
澧為噺鏀墮泦綆楁硶鐨勫熀紜浠嶆槸浼犵粺鐨勬爣璁幫紞娓呴櫎鍜屽鍒剁畻娉曘傚閲忔敹闆嗙畻娉曢氳繃瀵硅繘紼嬮棿鍐茬獊鐨勫Ε鍠勫鐞嗭紝鍏佽鍨冨溇鏀墮泦榪涚▼浠ュ垎闃舵鐨勬柟寮忓畬鎴愭爣璁般佹竻鐞嗘垨澶嶅埗宸ヤ綔銆傝緇嗗垎鏋愬悇縐嶅閲忔敹闆嗙畻娉曠殑鍐呴儴鏈虹悊鏄竴浠剁浉褰撶箒鐞愮殑浜嬫儏錛屽湪榪欓噷錛岃鑰呬滑闇瑕佷簡瑙g殑浠呬粎鏄細 H. G. Baker 絳変漢鐨勫姫鍔涘凡緇忓皢瀹炴椂鍨冨溇鏀墮泦鐨勬ⅵ鎯沖彉鎴愪簡鐜板疄錛屾垜浠啀涔熶笉鐢ㄤ負鍨冨溇鏀墮泦鎵撴柇紼嬪簭鐨勮繍琛岃岀儲鎭間簡銆?
-------------------------------------------------------------------------------------------------------
鍜屽ぇ澶氭暟杞歡寮鍙戞妧鏈竴鏍鳳紝緇熻瀛﹀師鐞嗘昏兘鍦ㄦ妧鏈彂灞曠殑榪囩▼涓搗鍒板己鍔涘偓鍖栧墏鐨勪綔鐢ㄣ?1980 騫村墠鍚庯紝鍠勪簬鍦ㄧ爺絀朵腑浣跨敤緇熻鍒嗘瀽鐭ヨ瘑鐨勬妧鏈漢鍛樺彂鐜幫紝澶у鏁板唴瀛樺潡鐨勭敓瀛樺懆鏈熼兘姣旇緝鐭紝鍨冨溇鏀墮泦鍣ㄥ簲褰撴妸鏇村鐨勭簿鍔涙斁鍦ㄦ鏌ュ拰娓呯悊鏂板垎閰嶇殑鍐呭瓨鍧椾笂銆傝繖涓彂鐜板浜庡瀮鍦炬敹闆嗘妧鏈殑浠峰煎彲浠ョ敤槨愬肪綰哥殑渚嬪瓙姒傛嫭濡備笅錛?
濡傛灉鍨冨溇鏀墮泦鏈哄櫒浜鴻凍澶熻仾鏄庯紝浜嬪厛鎽告竻浜嗛鍘呴噷姣忎釜浜哄湪鐢ㄩ鏃朵嬌鐢ㄩ宸劇焊鐨勪範鎯斺旀瘮濡傛湁浜涗漢鍠滄鍦ㄧ敤槨愬墠鍚庡悇鐢ㄦ帀涓寮犻宸劇焊錛屾湁鐨勪漢鍠滄鑷鑷崇粓鏀ョ潃涓寮犻宸劇焊涓嶆斁錛屾湁鐨勪漢鍒欐瘡鎵撲竴涓柗鍤忓氨鐢ㄥ幓涓寮犻宸劇焊鈥斺旀満鍣ㄤ漢灝卞彲浠ュ埗瀹氬嚭鏇村畬鍠勭殑槨愬肪綰稿洖鏀惰鍒掞紝騫舵繪槸鍦ㄤ漢浠垰鎵旀帀槨愬肪綰告病澶氫箙灝辨妸鍨冨溇鎹¤蛋銆傝繖縐嶅熀浜庣粺璁″鍘熺悊鐨勫仛娉曞綋鐒跺彲浠ヨ槨愬巺鐨勬暣媧佸害鎴愬嶆彁楂樸?
D. E. Knuth 錛?T. Knight 錛?G. Sussman 鍜?R. Stallman 絳変漢瀵瑰唴瀛樺瀮鍦劇殑鍒嗙被澶勭悊鍋氫簡鏈鏃╃殑鐮旂┒銆?1983 騫達紝 H. Lieberman 鍜?C. Hewitt 鍙戣〃浜嗛涓?#8220;鍩轟簬瀵硅薄瀵垮懡鐨勪竴縐嶅疄鏃跺瀮鍦炬敹闆嗗櫒錛?A real-time garbage collector based on the lifetimes of objects 錛?#8221;鐨勮鏂囥傝繖綃囪憲鍚嶇殑璁烘枃鏍囧織鐫鍒嗕唬鏀墮泦綆楁硶鐨勬寮忚癁鐢熴傛鍚庯紝鍦?H. G. Baker 錛?R. L. Hudson 錛?J. E. B. Moss 絳変漢鐨勫叡鍚屽姫鍔涗笅錛屽垎浠f敹闆嗙畻娉曢愭笎鎴愪負浜嗗瀮鍦炬敹闆嗛鍩熼噷鐨勪富嫻佹妧鏈?
鍒嗕唬鏀墮泦綆楁硶閫氬父灝嗗爢涓殑鍐呭瓨鍧楁寜瀵垮懡鍒嗕負涓ょ被錛屽勾鑰佺殑鍜屽勾杞葷殑銆傚瀮鍦炬敹闆嗗櫒浣跨敤涓嶅悓鐨勬敹闆嗙畻娉曟垨鏀墮泦絳栫暐錛屽垎鍒鐞嗚繖涓ょ被鍐呭瓨鍧楋紝騫剁壒鍒湴鎶婁富瑕佸伐浣滄椂闂磋姳鍦ㄥ鐞嗗勾杞葷殑鍐呭瓨鍧椾笂銆傚垎浠f敹闆嗙畻娉曚嬌鍨冨溇鏀墮泦鍣ㄥ湪鏈夐檺鐨勮祫婧愭潯浠朵笅錛屽彲浠ユ洿涓烘湁鏁堝湴宸ヤ綔鈥斺旇繖縐嶆晥鐜囦笂鐨勬彁楂樺湪浠婂ぉ鐨?Java 铏氭嫙鏈轟腑寰楀埌浜嗘渶濂界殑璇佹槑銆?
-------------------------------------------------------------------------------------------------------
Lisp 鏄瀮鍦炬敹闆嗘妧鏈殑絎竴涓彈鐩婅咃紝浣嗘樉鐒朵笉鏄渶鍚庝竴涓傚湪 Lisp 璇█涔嬪悗錛岃璁稿澶氫紶緇熺殑銆佺幇浠g殑銆佸悗鐜頒唬鐨勮璦宸茬粡鎶婂瀮鍦炬敹闆嗘妧鏈媺鍏ヤ簡鑷繁鐨勬鎶便傞殢渚夸婦鍑犱釜渚嬪瓙鍚э細璇炵敓浜?1964 騫寸殑 Simula 璇█錛?1969 騫寸殑 Smalltalk 璇█錛?1970 騫寸殑 Prolog 璇█錛?1973 騫寸殑 ML 璇█錛?1975 騫寸殑 Scheme 璇█錛?1983 騫寸殑 Modula-3 璇█錛?1986 騫寸殑 Eiffel 璇█錛?1987 騫寸殑 Haskell 璇█……瀹冧滑閮藉厛鍚庝嬌鐢ㄤ簡鑷姩鍨冨溇鏀墮泦鎶鏈傚綋鐒訛紝姣忎竴縐嶈璦浣跨敤鐨勫瀮鍦炬敹闆嗙畻娉曞彲鑳戒笉灝界浉鍚岋紝澶у鏁拌璦鍜岃繍琛岀幆澧冪敋鑷沖悓鏃朵嬌鐢ㄤ簡澶氱鍨冨溇鏀墮泦綆楁硶銆備絾鏃犺鎬庢牱錛岃繖浜涘疄渚嬮兘璇存槑錛屽瀮鍦炬敹闆嗘妧鏈粠璇炵敓鐨勯偅涓澶╄搗灝變笉鏄竴縐嶆洸楂樺拰瀵$殑“瀛﹂櫌媧?#8221;鎶鏈?
瀵逛簬鎴戜滑鐔熸倝鐨?C 鍜?C++ 璇█錛屽瀮鍦炬敹闆嗘妧鏈竴鏍峰彲浠ュ彂鎸ュ法澶х殑鍔熸晥銆傛濡傛垜浠湪瀛︽牎涓氨宸茬粡鐭ラ亾鐨勯偅鏍鳳紝 C 鍜?C++ 璇█鏈韓騫舵病鏈夋彁渚涘瀮鍦炬敹闆嗘満鍒訛紝浣嗚繖騫朵笉濡ㄧ鎴戜滑鍦ㄧ▼搴忎腑浣跨敤鍏鋒湁鍨冨溇鏀墮泦鍔熻兘鐨勫嚱鏁板簱鎴栫被搴撱備緥濡傦紝鏃╁湪 1988 騫達紝 H. J. Boehm 鍜?A. J. Demers 灝辨垚鍔熷湴瀹炵幇浜嗕竴縐嶄嬌鐢ㄤ繚瀹堝瀮鍦炬敹闆嗙畻娉曪紙 Conservative GC Algorithmic 錛夌殑鍑芥暟搴擄紙鍙傝 http://www.hpl.hp.com/personal/Hans_Boehm/gc 錛夈傛垜浠彲浠ュ湪 C 璇█鎴?C++ 璇█涓嬌鐢ㄨ鍑芥暟搴撳畬鎴愯嚜鍔ㄥ瀮鍦炬敹闆嗗姛鑳斤紝蹇呰鏃訛紝鐢氳嚦榪樺彲浠ヨ浼犵粺鐨?C/C++ 浠g爜涓庝嬌鐢ㄨ嚜鍔ㄥ瀮鍦炬敹闆嗗姛鑳界殑 C/C++ 浠g爜鍦ㄤ竴涓▼搴忛噷鍗忓悓宸ヤ綔銆?
1995 騫磋癁鐢熺殑 Java 璇█鍦ㄤ竴澶滀箣闂村皢鍨冨溇鏀墮泦鎶鏈彉鎴愪簡杞歡寮鍙戦鍩熼噷鏈涓烘祦琛岀殑鎶鏈箣涓銆備粠鏌愮瑙掑害璇達紝鎴戜滑寰堥毦鍒嗘竻絀剁珶鏄?Java 浠庡瀮鍦炬敹闆嗕腑鍙楃泭錛岃繕鏄瀮鍦炬敹闆嗘妧鏈湰韜?Java 鐨勬櫘鍙婅屾壃鍚嶃傚煎緱娉ㄦ剰鐨勬槸錛屼笉鍚岀増鏈殑 Java 铏氭嫙鏈轟嬌鐢ㄧ殑鍨冨溇鏀墮泦鏈哄埗騫朵笉瀹屽叏鐩稿悓錛?Java 铏氭嫙鏈哄叾瀹炰篃緇忚繃浜嗕竴涓粠綆鍗曞埌澶嶆潅鐨勫彂灞曡繃紼嬨傚湪 Java 铏氭嫙鏈虹殑 1.4.1 鐗堜腑錛屼漢浠彲浠ヤ綋楠屽埌鐨勫瀮鍦炬敹闆嗙畻娉曞氨鍖呮嫭鍒嗕唬鏀墮泦銆佸鍒舵敹闆嗐佸閲忔敹闆嗐佹爣璁幫紞鏁寸悊銆佸茍琛屽鍒訛紙 Parallel Copying 錛夈佸茍琛屾竻闄わ紙 Parallel Scavenging 錛夈佸茍鍙戯紙 Concurrent 錛夋敹闆嗙瓑璁稿縐嶏紝 Java 紼嬪簭榪愯閫熷害鐨勪笉鏂彁鍗囧湪寰堝ぇ紼嬪害涓婂簲璇ュ綊鍔熶簬鍨冨溇鏀墮泦鎶鏈殑鍙戝睍涓庡畬鍠勩?
灝界鍘嗗彶涓婂凡緇忔湁璁稿鍖呭惈鍨冨溇鏀墮泦鎶鏈殑搴旂敤騫沖彴鍜屾搷浣滅郴緇熷嚭鐜幫紝浣?Microsoft .NET 鍗存槸絎竴縐嶇湡姝e疄鐢ㄥ寲鐨勩佸寘鍚簡鍨冨溇鏀墮泦鏈哄埗鐨勯氱敤璇█榪愯鐜銆備簨瀹炰笂錛?.NET 騫沖彴涓婄殑鎵鏈夎璦錛屽寘鎷?C# 銆?Visual Basic .NET 銆?Visual C++ .NET 銆?J# 絳夌瓑錛岄兘鍙互閫氳繃鍑犱箮瀹屽叏鐩稿悓鐨勬柟寮忎嬌鐢?.NET 騫沖彴鎻愪緵鐨勫瀮鍦炬敹闆嗘満鍒躲傛垜浠技涔庡彲浠ユ柇璦錛?.NET 鏄瀮鍦炬敹闆嗘妧鏈湪搴旂敤棰嗗煙閲岀殑涓嬈¢噸澶у彉闈╋紝瀹冧嬌鍨冨溇鏀墮泦鎶鏈粠涓縐嶅崟綰殑鎶鏈彉鎴愪簡搴旂敤鐜涔冭嚦鎿嶄綔緋葷粺涓殑涓縐嶅唴鍦ㄦ枃鍖栥傝繖縐嶅彉闈╁鏈潵杞歡寮鍙戞妧鏈殑褰卞搷鍔涗篃璁歌榪滆繙瓚呰繃 .NET 騫沖彴鏈韓鐨勫晢涓氫環鍊箋?
-------------------------------------------------------------------------------------------------------
浠婂ぉ錛岃嚧鍔涗簬鍨冨溇鏀墮泦鎶鏈爺絀剁殑浜轟滑浠嶅湪涓嶆噲鍔姏錛屼粬浠殑鐮旂┒鏂瑰悜鍖呮嫭鍒嗗竷寮忕郴緇熺殑鍨冨溇鏀墮泦銆佸鏉備簨鍔$幆澧冧笅鐨勫瀮鍦炬敹闆嗐佹暟鎹簱絳夌壒瀹氱郴緇熺殑鍨冨溇鏀墮泦絳夌瓑銆?
浣嗗湪紼嬪簭鍛樹腑闂達紝浠嶆湁涓嶅皯浜哄鍨冨溇鏀墮泦鎶鏈笉灞戜竴欏撅紝浠栦滑瀹佹効鐩鎬俊鑷繁閫愯緙栧啓鐨?free 鎴?delete 鍛戒護錛屼篃涓嶆効鎶婂瀮鍦炬敹闆嗙殑閲嶄換浜ょ粰閭d簺鍦ㄤ粬浠湅鏉ユ棦锠㈠張絎ㄧ殑鍨冨溇鏀墮泦鍣ㄣ?
鎴戜釜浜鴻涓猴紝鍨冨溇鏀墮泦鎶鏈殑鏅強鏄ぇ鍔挎墍瓚嬶紝榪欏氨鍍忕敓媧諱細瓚婃潵瓚婂ソ涓鏍鋒瘚搴哥疆鐤戙備粖澶╃殑紼嬪簭鍛樹篃璁鎬細鍥犱負鍨冨溇鏀墮泦鍣ㄨ鍗犵敤涓瀹氱殑 CPU 璧勬簮鑰屽鍏舵湜鑰屽嵈姝ワ紝浣嗕簩鍗佸騫村墠鐨勭▼搴忓憳榪樻浘鍥犱負楂樼駭璇█閫熷害澶參鑰屽潥鎸佺敤鏈哄櫒璇█鍐欑▼搴忓憿錛佸湪紜歡閫熷害鏃ユ柊鏈堝紓鐨勪粖澶╋紝鎴戜滑鏄鍚濇儨閭d竴鐐瑰効鏃墮棿鎹熻楄岃笩韜囦笉鍓嶏紝榪樻槸璇ュ潥瀹氫笉縐誨湴绔欏湪浠g爜鍜岃繍琛岀幆澧冪殑鍑鍖栧墏鈥斺斿瀮鍦炬敹闆嗙殑涓杈瑰憿錛?
鏈枃鍐呭鏉ヨ嚜緗戠粶錛屼絾涓嶇煡閬撳師鍒涘拰鍑哄
濡傛灉浠?/span>
A
銆?/span>
B
銆?/span>
C
銆?/span>
D鈥︹
銆?/span>
Y
銆?/span>
Z
榪?/span>
26
涓嫳鏂囧瓧姣嶏紝鍒嗗埆絳変簬鐧懼垎涔?/span>
1
銆?/span>
2
銆?/span>
3
銆?/span>
4鈥︹?4
銆?/span>
25
銆?/span>
26
榪?/span>
26
涓暟鍊鹼紝閭d箞鎴戜滑灝辮兘寰楀嚭濡備笅鏈夎叮鐨勭粨璁猴細
鍔姏宸ヤ綔錛?/span>
H+A+R+D+W+O+R+K=8+1+18+4+23+15+18+11=98%
鐭ヨ瘑錛?/span>
K+N+O+W+L+E+D+G+E=11+14+15+23+12+5+4+7+5=96%
鐖辨儏錛?/span>
L+O+V+E=12+5+22+5=54%
濂借繍錛?/span>
L+U+C+K=12+21+3+11=47%
榪欎簺鎴戜滑閫氬父闈炲父鐪嬮噸鐨勪笢瑗塊兘涓嶆槸鏈瀹屾弧鐨勶紝铏界劧瀹冧滑闈炲父閲嶈銆傞偅涔堬紝絀剁珶浠涔堣兘浣垮緱鐢熸椿鍙樺緱鍦嗘弧錛?/span>
鏄噾閽卞悧錛?/span>
M+O+N+E+Y=13+15+14+5+25=72%
鏄瀵煎姏鍚楋紵
L+E+A+D+E+R+S+H+I+P=12+5+1+4+5+18+19+9+16=89%
鏄у悧錛?/span>
S+E+X=19+24+5=48%
閭d箞錛屼粈涔堣兘浣跨敓媧誨彉鎴?/span>
100%
寰楀渾婊″憿錛?/span>
蹇冩侊紒
A+T+T+I+T+U+D+E=1+20+20+9+20+21+4+5=100%
姝f槸鎴戜滑瀵瑰緟宸ヤ綔銆佺敓媧誨緱鎬佸害鑳藉浣挎垜浠殑鐢熸椿杈懼埌
100%
鐨勫渾婊★紒
Ma Jia nan
|
聽聽
vector<string> svec;
聽聽 string s( "MaJianan" ); |
insert()灝嗙浜屼釜鍙傛暟錛堣琚彃鍏ョ殑鍊鹼級鎻掑叆鍒扮涓涓弬鏁幫紙鎸囧悜瀹瑰櫒涓煇涓綅緗殑iterator錛夋寚鍚戠殑浣嶇疆鐨勫墠闈€?
鏇翠負闅忔満鐨勬彃鍏ユ搷浣滃彲浠ュ涓嬪疄鐜幫細
|
聽聽 string s1( "yuanlaishini" );
聽聽 iter = find( slist.begin(), slist.end(), s1 ); |
find()榪斿洖琚煡鎵懼厓绱犲湪瀹瑰櫒涓殑浣嶇疆錛屽鏋滄煡鎵懼け璐ワ紝榪斿洖end()iterator.
聽聽聽
//slist.push_back( value )絳変環浜幝犅犅?
slist.insert( slist.end(), value );
聽
2錛?鍦ㄦ煇涓綅緗彃鍏ユ寚瀹氭暟閲忕殑鍏冪礌.
聽聽 渚嬪錛屽湪vector鐨勫紑濮嬪鎻掑叆10涓狹aJianan錛?
|
聽聽
vector<string> svec; 聽聽 svec.insert( svec.begin(), 10, mjn ); |
聽
3錛夊悜瀹瑰櫒鎻掑叆涓孌佃寖鍥村唴鐨勫厓绱狅細
|
聽string sa[3] = { "MaJianan", "yuanlaishini", "blog.sina.com.cn"};
聽 聽//鎻掑叆鏁扮粍涓殑鍏ㄩ儴鍏冪礌
聽 聽//鎻掑叆鏁扮粍涓殑閮ㄥ垎鍏冪礌 |
聽
4錛夐氳繃涓瀵筰terator鏉ユ爣璁板甫鎻掑叆鍊肩殑鑼冨洿錛屽彲浠ユ槸鍙︿竴涓獀ector
|
渚嬩竴錛?br />聽聽 //鎻掑叆svec涓惈鏈夌殑鍏冪礌錛屼粠svec2涓棿寮濮?br />聽聽 svec2.insert( svec2.begin() + svec2.size()/2, svec.begin(), svec.end() );
聽聽 渚嬩簩錛?br />聽聽 //鎶妔evc涓殑鍏冪礌鎻掑叆鍒皊list涓璼Value鐨勫墠闈?br />聽聽 list<string> slist; |
浜?欏哄簭瀹瑰櫒鎿嶄綔涔嬪垹闄わ紙erase錛?/strong>
1錛?鍒犻櫎鍗曚釜鍏冪礌
|
list<string> slist; |
聽
2錛?鍒犻櫎鏈変竴瀵筰terator鏍囪鐨勪竴孌佃寖鍥村唴鐨勫厓绱?
|
//鍒犻櫎鎵鏈夊厓绱?br />slist.erase( slist.begin(), slist.end() );
//鍒犻櫎閮ㄥ垎鍏冪礌
渚嬩簩錛?br />list<string>::iterator first, last; |
3錛?涓巔ush_back()鐩稿搴旓紝pop_back()鍒犻櫎瀹瑰櫒鐨勬湯灝懼厓绱犮?
涓?欏哄簭瀹瑰櫒鎿嶄綔涔嬭祴鍊?=)鍜屽鎹?swap)
//slist1鍚湁8涓厓绱?br />//slist2鍚湁16涓厓绱?br />1)濡傛灉
slist1 = slist2;
聽
聽 slist1鎷ユ湁涓庤鎷瘋礉瀹瑰櫒鐩稿悓鐨勫厓绱犳暟鐩?--16.slist2鏈?6涓厓绱狅紝娌℃湁鍙樺寲銆?br />聽 slist1涓師鏉ョ殑8涓厓绱犺鍒犻櫎(璋冪敤string鐨勬瀽鏋勫嚱鏁?
2)濡傛灉 slist1.swap( slist2 );
聽
聽 slist1鐜板湪鏈?6涓厓绱狅紝鑰宻list2鍑芥暟slist1涓師鏈夌殑8涓厓绱犵殑鎷瘋礉
聽 濡傛灉涓や釜瀹瑰櫒闀垮害涓嶅悓錛屽垯閲嶇疆瀹瑰櫒鐨勯暱搴β?
聽
聽
鏈枃涓紝鎴戝皢閽堝榪欎簺鐪嬩技鎬紓鐨勬渶浣沖疄璺甸槓榪版垜鐨勮鐐癸紝騫剁畝榪版垜瀵瑰疄鏂借繖浜涙渶浣沖疄璺電殑涓浜涙濊冦?/font>
涓銆佽鍒掓父鎴?/font>
鑳藉鎶婅鍒掑彨鍋?#8220;娓告垙”鏄渶瑕佷竴瀹氬媷姘旂殑銆傚湪浼犵粺鐨勮蔣浠跺紑鍙戞柟娉曞涓紝璁″垝鏄婦瓚寵交閲嶇殑涓鐜紝鍦ㄥ埗璁㈣鍒掑墠闇瑕佷粩緇嗙殑浼扮畻錛屽湪璁″垝瀹炴柦鐨勮繃紼嬩腑錛岃繕瑕佷笉鍋滅殑璺熻釜銆佷慨姝o紝鐩磋嚦鏁翠釜欏圭洰瀹屾垚銆?/font>
鑰屽湪XP涓紝璁″垝浼間箮瑕佽交鏉捐澶氥傝繖騫朵笉鏄洜涓鴻鍒掓湰韜彉寰楄崏鐜囧拰鏃犲叧鐥涚棐錛岃屾槸寰楃泭浜嶺P鐨勫皬鐗堟湰鍙戝竷鎬濈淮銆傝蔣浠剁殑涓涓増鏈槸濡傛鐭皬綆鍗曪紝浠ヨ嚦浜庡瀹冭繘琛屽畬鏁寸殑璇勪及銆侀綆椼佽窡韙拰淇瑕佸鏄撹澶氥備簨瀹炰笂錛孹P涓噰鐢ㄧ殑璁″垝鏂瑰紡錛堜笟鍔′漢鍛樺拰寮鍙戜漢鍛樺叡鍚屽弬涓庯紝鍚勫徃鍏惰亴錛夊湪澶у鏁扮幇浠h蔣浠朵紒涓氫腑鏃╁凡閲囩敤錛屼絾鏄敱浜庨」鐩繃浜庡簽澶э紝寰堥毦鍦ㄥ紑濮嬮樁孌靛埗璁㈠嚭瀹屽杽鐨勮鍒掋傝屽湪XP涓紝浜轟滑鍙渶瑕侀拡瀵逛竴涓竴涓や釜鏈堢殑灝忛」鐩繘琛岃窡韙拰綆$悊錛屾棤褰腑闄嶄綆浜嗚鍒掔殑椋庨櫓銆?/font>
浜屻侀殣鍠?/font>
鍦╔P涓紝浜轟滑緇忓父浼氫嬌鐢ㄩ殣鍠繪潵浠f浛浼犵粺寮鍙戣繃紼嬩腑鐨勪綋緋葷粨鏋勮璁°備粠鎸囧寮鍙戠殑瑙掑害鏉ヨ錛岄殣鍠諱技涔庝笉澶熺簿紜紝瀹規槗璁╀漢璇В銆備絾鏄紝瀵逛簬鍏鋒湁綾諱技鑳屾櫙鐨勫悓涓涓」鐩粍涓殑寮鍙戜漢鍛樻潵璇達紝闅愬柣鍒欐洿渚夸簬鐞嗚В鍜屼氦嫻併傚緢闅炬兂璞′袱涓▼搴忓憳闈㈠鐫涓寮犲簽澶х殑浣撶郴緇撴瀯鍥炬椂鑳藉鐪熸鏈夋晥鐨勬矡閫氾紝鑰岄殣鍠誨緢濂界殑瑙e喅浜嗚繖涓棶棰樸?/font>
涓夈佺畝鍗曡璁?/font>
涓嶇煡閬撲粠浠涔堟椂鍊欏紑濮嬶紝寮鍙戜漢鍛樹範鎯簡涓烘槑澶╄岃璁°備竴涓紑鍙戜漢鍛樿璁′簡涓涓鏉傜殑綾葷戶鎵跨粨鏋勶紝鍙槸涓轟簡鎻愰珮紼嬪簭鐨勬墍璋撶伒媧繪с傛病浜虹煡閬撹繖鏍峰間笉鍊鹼紝騫朵笉鏄蔣浠剁殑姣忎竴涓儴鍒嗛兘闇瑕佹墿灞曘備絾鏄紝瀵逛簬浼犵粺鐨勮蔣浠跺紑鍙戜漢鍛樻潵璇達紝榪欎箞鍋氬張鏄揩涓嶅緱宸層傚鏋滄病鏈夐鍏堝仛濂藉噯澶囷紝鍦ㄥ彉鍖栨潵涓存椂灝變細鎺墜涓嶅強錛屼粯鍑烘矇閲嶇殑浠d環銆?/font>
浣嗘槸鍦╔P涓紝灝忕増鏈彂琛岀殑鏂規硶浣垮緱鍙樺寲騫朵笉閭d箞鍙曪紝鑰岄噸鏋勭殑騫挎硾閲囩敤錛屼嬌寰椾唬鐮佹繪槸鍙互鍦ㄩ渶瑕佹椂鍙樺緱鏇村姞鐏墊椿銆傛澶栵紝鐢變簬浣犵殑浠g爜鎬繪槸浼氳鍒漢瀹℃煡錛堜唬鐮侀泦浣撴墍鏈夋潈鍜岀粨瀵圭紪紼嬶級錛屽洜姝や篃鍙互閬垮厤榪囦簬榪芥眰綆鍗曡屽拷瑙嗕簡閲嶈鐨勭粏鑺傘?/font>
鍥涖佹祴璇曚紭鍏?/font>
娌℃湁浠g爜瑕佹祴璇曠▼搴忔湁浠涔堢敤錛熻繖鏄祴璇曚紭鍏堟渶瀹規槗璁╀漢璇В鐨勫湴鏂廣傛祴璇曚紭鍏堣兘澶熻寮鍙戜漢鍛樻洿娓呮鐨勮璇嗗埌錛岀▼搴忓皢浼氬浣曡浣跨敤銆傞氳繃瀵逛笉鍚岀殑嫻嬭瘯鐢ㄤ緥鐨勬濊冿紝寮鍙戜漢鍛樹篃鑳藉鏇存竻鏅扮殑璁よ瘑鍒扮▼搴忕殑鍔熻兘澶栧歡銆傝屾洿澶氱殑鍏朵粬鐨勫紑鍙戜漢鍛橈紝鍒欓氳繃嫻嬭瘯鐢ㄤ緥灝卞彲浠ヨ幏寰椾竴浠界簿紜殑浣跨敤鎵嬪唽錛屽湪榪欎喚浣跨敤鎵嬪唽涓紝鎻忚堪浜嗕綔鑰呰冭檻鍒扮殑鎵鏈夎緭鍏ュ拰杈撳嚭緇撴灉錛岃繖鏍蜂笉浠呬究浜庝漢浠簡瑙g▼搴忥紝鏇村鍔犱簡鍙戠幇紼嬪簭閿欒鐨勬満浼氾紙緙哄け鐨勬祴璇曠敤渚嬪線寰浣撶幇鍑轟綔鑰呭拷瑙嗙殑鏌愪簺浣跨敤鎯呭喌錛夈?/font>
浜斻佺粨瀵圭紪紼?/font>
涓や釜紼嬪簭鍛樺潗鍦ㄤ竴璧鳳紝鑳藉鎻愰珮寮鍙戞晥鐜囧悧錛熺▼搴忓憳闅鵑亾涓嶆槸涓緹ら珮鍌茬殑鐚紝涔犳儻浜庣緹ょ儲灞咃紝鎶婂ご鎶緱楂橀珮鍚楋紵
浜嬪疄騫墮潪濡傛銆傚湪涓涓紜殑銆佸悎鐞嗙殑銆佽兘澶熷疄鐜扮殑澶х洰鏍囦笅錛岀▼搴忓憳浠笉浠呰兘澶熷拰騫沖叡澶勶紝鏇村彲浠ョ浉浜掑悎浣滐紝鍒涢犲嚭浼樼鐨勩侀珮璐ㄩ噺鐨勭▼搴忋傛矡閫氫竴鐩存槸杞歡欏圭洰綆$悊涓殑涓涓噸瑕佽棰橈紝鑰岀粨瀵圭紪紼嬫彁渚涗簡涓涓崄鍒嗘湁鏁堢殑娌熼氭笭閬撱傛澶栵紝緇撳緙栫▼涔熸洿瀹規槗璁╂柊浜鴻瀺鍏ュ洟浣撱傚湪鍑犱釜楂樼駭紼嬪簭鍛樼殑鎸囧紩涓嬶紝浠栦細鏇村鏄撴壘鍑虹▼搴忕殑鑴夌粶錛屾妸鎻$▼搴忕殑鎬濇兂銆傝緝涔嬫瑙勭殑鍩硅錛岃繖縐嶆柟寮忔洿杞繪澗涔熸洿鏈夋晥銆傚浜庡洟闃熶腑鐨勬墍鏈夌▼搴忓憳鏉ヨ錛岀粨瀵圭紪紼嬮兘鏄竴涓簡瑙e叾浠栦漢璁捐鎬濇兂鐨勬満浼氾紝閫氳繃緇撳緙栫▼錛岃兘澶熸洿濂界殑瀹炵幇浠g爜闆嗕綋鎵鏈夋潈錛屼篃鑳藉闄嶄綆鍥犱負浜哄憳嫻佸姩閫犳垚鐨勯闄┿?/font>
緇撳緙栫▼鏈澶х殑濂藉鍦ㄤ簬錛岃兘澶熸瀬澶х殑鍑忓皯紼嬪簭涓綔鍦ㄥ彉鍖栫殑鍙兘鎬с備袱涓漢閫氳繃浜ゆ祦浜掔浉浜ゆ崲鑷繁瀵圭▼搴忕殑涓嶅悓鐞嗚В錛屾洿瀹規槗鎵懼嚭紼嬪簭涓彲鑳藉嚭鐜扮殑鍙樺寲鎴栭敊璇紝浠庤屼嬌紼嬪簭鏇村姞鍙潬鍜屽仴澹?/font>
鍏佹寔緇泦鎴?/font>
闆嗘垚涓鐩存槸鏈璐瑰姏鐨勫伐浣滀箣涓錛屾湰鏉ュ伐浣滅殑濂藉ソ鐨勪唬鐮侊紝鏀懼湪涓璧峰氨涓嶈兘榪愯漿錛屾洿緋熺硶鐨勬槸鎴愮櫨涓婂崈鏉′笉鐭ユ墍浜戠殑閿欒鐮侊紝娌℃湁浜虹煡閬撹繖浜涢敊璇爜鏉ヨ嚜浣曞銆傝繖鏄瘡涓」鐩嚑涔庨兘浼氶亣鍒扮殑鏈鍥伴毦鐨勯樁孌碉紝紼嬪簭鍛樹滑蹇呴』闆嗗悎鍦ㄤ竴璧鳳紝緲婚槄鏁伴噺宸ㄥぇ鐨勬帴鍙e畾涔夋枃浠訛紝鍙嶅鏌ョ湅浠g爜錛屽悓鏃惰繕瑕佷笉鏂殑鍋氬嚭鎵胯銆?/font>
鎸佺畫闆嗘垚姝f槸瑙e喅涓婅堪闂鐨勬柟娉曘傞氳繃澶氭銆佸皬澧為噺鐨勯泦鎴愶紝鎴戜滑鎬繪槸鑳藉浠ユ渶蹇殑閫熷害瀹氫綅閿欒鍑虹幇鐨勪綅緗紙鍥犱負澧炲姞鐨勪唬鐮佸緢灝戯級錛岀粨鍚堝ぇ閲忔祴璇曠敤渚嬶紝鎴戜滑涔熷彲浠ョ‘淇濇瘡涓涓泦鎴愮増鏈兘灝藉彲鑳界殑鍙潬銆?/font>
姝ゅ錛屾寔緇泦鎴愬嚑涔庡彲浠ュ湪浠諱綍鏃墮棿鍚戞垜浠彁渚涗竴涓彲浠ュ伐浣滅殑鐗堟湰錛屾垜浠彲浠ュ皢榪欎釜鐗堟湰鐢ㄤ簬鍐呴儴璁ㄨ鍜屾祴璇曘佸鎴峰睍紺恒佸鎴鋒祴璇曘佸皬鐗堟湰鍙戝竷絳夌瓑錛岃繖浣垮緱鎴戜滑涓嶉渶瑕佽姳璐瑰お澶氱殑鏃墮棿瀵圭幇鏈夌殑紼嬪簭淇慨琛ヨˉ錛屼互鐢熸垚涓涓猟emo銆?/font>
涓婃枃綆鍗曞彊榪頒簡XP涓父浼氬紩璧蜂簤璁殑鍏釜鏈浣沖疄璺電殑浼樼偣銆備笅闈㈡湰鏂囧皢緇撳悎瀹為檯璋堣皥瀹炴柦XP涓渶瑕佹敞鎰忕殑涓浜涢棶棰樸?/font>
涓銆侀傜敤鎬ч棶棰?/font>
XP鐞嗚鍦ㄦ彁鍑烘椂錛屾槑紜殑璇存槑錛歑P鏄傜敤浜庝腑灝忓瀷鍥㈤槦鍦ㄩ渶姹備笉鏄庣‘鎴栬呰繀閫熷彉鍖栫殑鎯呭喌涓嬭繘琛岃蔣浠跺紑鍙戠殑杞婚噺綰ф柟娉曘傝繖灝辨剰鍛崇潃錛孹P騫朵笉閫傜敤浜庢墍鏈夋儏鍐點傚湪鍑嗗瀹炴柦XP鍓嶏紝浣犱篃璁擱渶瑕佷粩緇嗚瘎浼伴」鐩殑鍏蜂綋鎯呭喌錛屼互鍐沖畾鏄惁鐪熺殑闇瑕侀噰鐢╔P銆?/font>
浜屻佹渶浣沖疄璺甸棿鐨勫叧鑱?/font>
XP鐨勪竴涓壒鐐規槸錛屽畠鎵鎺ㄥ磭鐨勬渶浣沖疄璺靛嚑涔庢繪槸鍜屽叾瀹冨疄璺靛叧鑱旂揣瀵嗭紝鍦ㄥ疄鏂戒竴欏規渶浣沖疄璺墊椂錛屽鏋滀笉鍚屾椂瀹炴柦鍏跺畠瀹炶返錛屽線寰闅句互杈懼埌鏈鍒濈殑鐩殑銆傚洜姝わ紝鍦ㄥ疄鏂絏P鏃訛紝闇瑕佷粩緇嗙爺絀跺悇欏瑰疄璺甸棿鐨勫叧鑱旓紝浠ョ‘瀹氭渶浣崇殑瀹炴柦鏂規銆?/font>
涓夈佸鏉劇殑鐜
XP鏄竴縐嶈拷姹傝嚜鐒剁殑宸ヤ綔鏂規硶銆傚畠鎵鍊″鐨勬槸錛岀▼搴忓憳浠互鏈鑷劧寮鍙戠殑鏂瑰紡瀹屾垚浠栦滑鐨勫伐浣溿傚浜庝範鎯簡浼犵粺寮鍙戞柟娉曚弗鏍肩鐞嗗埗搴︾殑綆$悊浜哄憳鏉ヨ錛岃繖寰寰鏄緢闅炬帴鍙楃殑銆備簬鏄氨鍑虹幇浜嗭紝铏界劧鏈楂樺喅絳栦漢鍐沖畾瀹炴柦XP錛屼絾綆$悊灞傚嵈鏃犳硶錛堟垨涓嶆効錛夌粰寮鍙戜漢鍛樻彁渚涘鏉劇殑鐜銆傚湪涓涓彜鏉垮兊鍖栫殑鏂規閲岋紝寮鍙戜漢鍛樹笉浼氱湡姝g殑鍥炲鑷劧錛屼粬浠細瑁呬綔姝e湪瀹炶返XP錛屼絾浜嬪疄涓婏紝浠栦滑渚濈劧鍦ㄨ佽礬涓婅璧幫紙鍙互瑙佸埌寰堝榪欐牱鐨勪緥瀛愶紝姣斿涓浜涜櫄寮犲0鍔跨殑嫻嬭瘯鐢ㄤ緥絳夌瓑錛夈?/font>
鍥涖佸繊鍙楀彉鍖?/font>
XP瀵逛簬浼犵粺杞歡欏圭洰綆$悊鎬濇兂鐨勫啿鍑伙紝鍙兘浼氫嬌寰堝綆$悊浜哄憳鎰熷埌涓嶈垝鏈嶃備篃璁竂P涓緇忓疄鏂斤紝灝變細緇欓」鐩粍甯︽潵緲誨ぉ瑕嗗湴鐨勫彉鍖栥傚鏋滆繖鏍風殑鍙樺寲璁╀綘鎰熷埌鎭愭儳錛岄偅涔堣鏆傛椂蹇嶈愶紝浣犱笉鑳借偗瀹氳繖縐嶅彉鍖栦笉濂斤紝闄ら潪浣犱翰鐪肩湅鍒般傚埌閭f椂鍐嶅喅瀹氫篃涓嶈繜銆?/font>
浜斻佹參鎱㈡潵
瀹炴柦XP鐨勮繃紼嬩笉鑳芥搷涔嬭繃鎬ャ傛渶濂界殑鏂規硶鏄紝鍦ㄩ儴鍒嗛」鐩粍涓厛琛屽疄鏂斤紝瀹炴柦鏃朵篃涓嶉渶瑕佸悓鏃跺疄鏂芥墍鏈夊疄璺碉紙浣嗚娉ㄦ剰鍚勪釜瀹炶返闂寸殑鍏寵仈闂錛夈傛湁鐨勬椂鍊欎綘浼氬彂鐜幫紝鍦ㄥ疄鏂戒簡閮ㄥ垎瀹炶返鍚庯紝鍏跺畠鐨勫疄璺典篃鎴愪負姘村埌娓犳垚鐨勪簨鎯呫傚綋緇忚繃浠旂粏璇勪及錛岀‘淇P鍦ㄩ」鐩粍涓‘瀹炴湁鏁堝悗錛屽啀閫愭鍦ㄤ紒涓氳寖鍥村唴鎺ㄥ箍錛屽繀瑕佺殑鏃跺欙紝闇瑕侀噰鍙栬嚜鎰跨殑鍘熷垯錛岀敱欏圭洰緇勭殑鎴愬憳鍐沖畾鏄惁闇瑕佸疄鏂絏P銆?/font>
浠ヤ笂鍗蟲槸鎴戝湪杞歡宸ョ▼榪囩▼璇劇▼涓互鍙婂鉤鏃跺伐浣溿佸涔犱腑瀵筙P鐨勪竴浜涜璇嗐?/font>
鏉ユ簮錛?/font> http://blog.csdn.net/leasun/archive/2006/08/15/1067508.aspx
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 鍏充簬 sizeof() 鐨勪竴浜涙濊?/font>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽椹槈妤?br />
鍏抽敭璇嶏細
sizeof
榪欐槸緗戜笂鐨勪竴涓笘瀛愶紝鏈鍒濇潵鑷偅閲屽凡緇忚涓嶅緱浜嗭紝涓嶈繃鎴戣寰楀緢涓嶉敊銆?/font>
鎴戝鍘熸枃鍋氫簡涓浜涗慨鏀癸紝騫舵坊鍔犱簡涓浜涘唴瀹廣傚鏋滄湁浠涔堥敊璇殑鍦版柟錛岃澶у鎸囨錛岃阿璋~
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 --- majianan 2005-12-19
聽
0.鍏抽敭瀛?/font> 錛歴izeof錛屽瓧鑺傚榻愶紝綾誨瀷澶у皬
鍓嶅悜澹版槑錛?/font>
聽聽聽 sizeof錛屼竴涓叾璨屼笉鎵殑瀹朵紮錛屽紩鏃犳暟鑿滈笩绔熸姌鑵?
聽聽聽 灝忚櫨鎴戝綋鍒濅篃娌″皯鐘糠緋婏紝縐夌潃鈥滆緵鑻︽垜涓涓紝騫哥鍗冧竾浜衡濈殑浼熷ぇ鎬濇兂,鎴戝喅瀹氬皢鍏跺敖鍙兘璇︾粏鐨勬葷粨涓涓嬨?
聽聽聽 浣嗗綋鎴戞葷粨鐨勬椂鍊欐墠鍙戠幇錛岃繖涓棶棰樻棦鍙互綆鍗曪紝鍙堝彲浠ュ鏉傘傛墍浠ユ湰鏂囨湁鐨勫湴鏂瑰茍涓嶉傚悎鍒濆鑰咃紝鐢氳嚦閮芥病鏈夊繀瑕佸ぇ浣滄枃绔犮備絾濡傛灉浣犳兂鈥滅煡鍏剁劧錛屾洿鐭ュ叾鎵浠ョ劧鈥濈殑璇濓紝閭d箞榪欑瘒鏂囩珷瀵逛綘鎴栬鏈夋墍甯姪銆?br />聽聽聽
聽聽 聽鑿滈笩鎴戝C++鐨勬帉鎻″皻鏈繁鍏ワ紝鍏朵腑涓嶄箯閿欒錛屾榪庡悇浣嶆寚姝e晩
1. 瀹氫箟錛?br /> 聽聽聽 sizeof鏄綍鏂圭鍦o紵
聽聽聽 sizeof 涔?C/C++ 涓殑涓涓搷浣滅錛坥perator錛夋槸涔熴傜畝鍗曡鍏朵綔鐢ㄥ氨鏄繑鍥炰竴涓璞℃垨鑰呯被鍨嬫墍鍗犵殑鍐呭瓨瀛楄妭鏁般?br />
MSDN涓婄殑瑙i噴涓猴細
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types).This keyword returns a value of type size_t.
聽聽聽 鍏惰繑鍥炲肩被鍨嬩負size_t錛屽湪澶存枃浠秙tddef.h涓畾涔夈傝繖鏄竴涓緷璧栦簬緙栬瘧緋葷粺鐨勫鹼紝涓鑸畾涔変負
typedef unsigned int size_t;
聽聽聽 涓栦笂緙栬瘧鍣ㄦ灄鏋楁繪伙紝浣嗕綔涓轟竴涓鑼冿紝瀹冧滑閮戒細淇濊瘉char銆乻igned char鍜寀nsigned char鐨剆izeof鍊間負1錛屾瘯绔焎har鏄垜浠紪紼嬭兘鐢ㄧ殑鏈灝忔暟鎹被鍨嬨?br />
2. 璇硶錛?/font>
聽聽聽 sizeof鏈変笁縐嶈娉曞艦寮忥紝濡備笅錛?br />聽聽聽 1) sizeof( object );聽聽聽 // sizeof( 瀵硅薄 );
聽聽聽 2) sizeof( type_name ); // sizeof( 綾誨瀷 );
聽聽聽 3) sizeof object;聽聽聽聽聽聽 // sizeof 瀵硅薄;
鎵浠ワ紝
int i;
sizeof( i );聽聽聽聽 // ok
sizeof i;聽聽 聽聽聽聽 // ok
sizeof( int );聽聽 // ok
sizeof int;聽聽聽聽聽 // error
鏃㈢劧鍐欐硶2鍙互鐢ㄥ啓娉?浠f浛錛屼負姹傚艦寮忕粺涓浠ュ強鍑忓皯鎴戜滑澶ц剳鐨勮礋鎷咃紝絎?縐嶅啓娉曪紝蹇樻帀瀹冨惂錛?
瀹為檯涓婏紝sizeof璁$畻瀵硅薄鐨勫ぇ灝忎篃鏄漿鎹㈡垚瀵瑰璞$被鍨嬬殑璁$畻銆備篃灝辨槸璇達紝鍚岀綾誨瀷鐨勪笉鍚屽璞″叾sizeof鍊奸兘鏄竴鑷寸殑銆?
榪欓噷錛屽璞″彲浠ヨ繘涓姝ュ歡浼歌嚦琛ㄨ揪寮忥紝鍗硈izeof鍙互瀵逛竴涓〃杈懼紡姹傚箋傜紪璇戝櫒鏍規嵁琛ㄨ揪寮忕殑鏈緇堢粨鏋滅被鍨嬫潵紜畾澶у皬錛屼竴鑸笉浼氬琛ㄨ揪寮忚繘琛岃綆椼?
渚嬪錛?
sizeof( 2 );聽聽聽聽聽聽聽聽// 2鐨勭被鍨嬩負int錛屾墍浠ョ瓑浠蜂簬 sizeof( int );
sizeof( 2 + 3.14 );聽// 3.14鐨勭被鍨嬩負double錛?涔熶細琚彁鍗囨垚double綾誨瀷錛屾墍浠ョ瓑浠蜂簬 sizeof( double );
聽聽聽 sizeof涔熷彲浠ュ涓涓嚱鏁拌皟鐢ㄦ眰鍊鹼紝鍏?font color="#0000ff">緇撴灉鏄嚱鏁拌繑鍥炵被鍨嬬殑澶у皬錛屽嚱鏁板茍涓嶄細琚皟鐢ㄣ?/font>鎴戜滑鏉ョ湅涓涓畬鏁寸殑渚嬪瓙錛?
*********************************************************
char foo()
{
聽聽聽聽printf("foo() has been called.\n");
聽聽聽聽return 'a';
}
int main()
{
聽聽聽聽size_t sz = sizeof( foo() );聽聽 // foo() 鐨勮繑鍥炲肩被鍨嬩負char錛屾墍浠z = sizeof(char)錛屼絾鍑芥暟foo()騫朵笉浼氳璋冪敤
聽聽聽聽printf("sizeof( foo() ) = %d\n", sz);
}
*********************************************************
C99鏍囧噯瑙勫畾錛屽嚱鏁般佷笉鑳界‘瀹氱被鍨嬬殑琛ㄨ揪寮忎互鍙婁綅鍩燂紙bit-field錛夋垚鍛樹笉鑳借璁$畻sizeof鍊鹼紝鍗充笅闈㈣繖浜涘啓娉曢兘鏄敊璇殑錛?
聽聽聽 sizeof( foo );聽聽聽聽 // error
聽聽聽 void foo2() { }
聽聽聽 sizeof( foo2() );聽 // error
聽聽聽 struct S
聽聽聽 {
聽聽聽聽聽聽聽聽unsigned int f1 : 1;
聽聽聽聽聽聽聽聽unsigned int f2 : 5;
聽聽聽聽聽聽聽聽unsigned int f3 : 12;
聽聽聽 };
聽聽聽聽sizeof( S.f1 );聽聽 // error
3. sizeof鐨勫父閲忔?/font>
聽聽聽 sizeof鐨勮綆楀彂鐢熷湪緙栬瘧鏃跺埢錛屾墍浠ュ畠鍙互琚綋浣滃父閲忚〃杈懼紡浣跨敤銆傚錛?
char ary[ sizeof( int ) * 10 ];聽聽 // ok
鏈鏂扮殑C99鏍囧噯瑙勫畾sizeof涔熷彲浠ュ湪榪愯鏃跺埢榪涜璁$畻銆傚涓嬮潰鐨勭▼搴忓湪Dev-C++涓彲浠ユ紜墽琛岋細
int n;
n = 10;聽聽聽聽聽聽聽 // n鍔ㄦ佽祴鍊?br />char ary[n];聽聽 // C99涔熸敮鎸佹暟緇勭殑鍔ㄦ佸畾涔?br />printf("%d\n", sizeof(ary)); // ok. 杈撳嚭10
浣嗗湪娌℃湁瀹屽叏瀹炵幇C99鏍囧噯鐨勭紪璇戝櫒涓氨琛屼笉閫氫簡錛屼笂闈㈢殑浠g爜鍦╒C6涓氨閫氫笉榪囩紪璇戙傛墍浠ユ垜浠?font color="#0000ff">鏈濂借繕鏄涓簊izeof鏄湪緙栬瘧鏈熸墽琛岀殑錛岃繖鏍蜂笉浼氬甫鏉ラ敊璇紝璁╃▼搴忕殑鍙Щ妞嶆у己浜涖?
4. 鍩烘湰鏁版嵁綾誨瀷鐨剆izeof
榪欓噷鐨勫熀鏈暟鎹被鍨嬫寚short銆乮nt銆乴ong銆乫loat銆乨ouble榪欐牱鐨勭畝鍗曞唴緗暟鎹被鍨嬨傜敱浜庡畠浠兘鏄拰緋葷粺鐩稿叧鐨勶紝鎵浠ュ湪涓嶅悓鐨勭郴緇熶笅鍙栧煎彲鑳戒笉鍚屻傝繖鍔″繀寮曡搗鎴戜滑鐨勬敞鎰忥紝灝介噺涓嶈鍦ㄨ繖鏂歸潰緇欒嚜宸辯▼搴忕殑縐繪閫犳垚楹葷儲銆?
涓鑸殑錛屽湪32浣嶇紪璇戠幆澧冧腑錛宻izeof(int)鐨勫彇鍊間負4銆?
5. 鎸囬拡鍙橀噺鐨剆izeof
瀛﹁繃鏁版嵁緇撴瀯鐨勪綘搴旇鐭ラ亾鎸囬拡鏄竴涓緢閲嶈鐨勬蹇碉紝瀹冭褰曚簡鍙︿竴涓璞$殑鍦板潃銆?font color="#0000ff">鏃㈢劧鏄潵瀛樻斁鍦板潃鐨勶紝閭d箞瀹冨綋鐒剁瓑浜庤綆楁満鍐呴儴鍦板潃鎬葷嚎鐨勫搴︺?/font>鎵浠ュ湪32浣嶈綆楁満涓紝涓涓寚閽堝彉閲忕殑榪斿洖鍊煎繀瀹氭槸4錛堟敞鎰忕粨鏋滄槸浠ュ瓧鑺備負鍗曚綅錛夈傚彲浠ラ璁★紝鍦ㄥ皢鏉ョ殑64浣嶇郴緇熶腑鎸囬拡鍙橀噺鐨剆izeof緇撴灉涓?銆?
*********************************************************
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)();聽// 鍑芥暟鎸囬拡
sizeof( pc ); // 緇撴灉涓?
sizeof( pi ); // 緇撴灉涓?
sizeof( ps ); // 緇撴灉涓?
sizeof( ppc );// 緇撴灉涓?
sizeof( pf ); // 緇撴灉涓?
*********************************************************
鎸囬拡鍙橀噺鐨剆izeof鍊間笌鎸囬拡鎵鎸囩殑瀵硅薄娌℃湁浠諱綍鍏崇郴錛屾鏄敱浜庢墍鏈夌殑鎸囬拡鍙橀噺鎵鍗犲唴瀛樺ぇ灝忕浉絳夛紝鎵浠FC娑堟伅澶勭悊鍑芥暟浣跨敤涓や釜鍙傛暟WPARAM銆丩PARAM灝辮兘浼犻掑悇縐嶅鏉傜殑娑堟伅緇撴瀯錛堜嬌鐢ㄦ寚鍚戠粨鏋勪綋鐨勬寚閽堬級銆?
6. 鏁扮粍鐨剆izeof
鏁扮粍鐨剆izeof鍊肩瓑浜庢暟緇勬墍鍗犵敤鐨勫唴瀛樺瓧鑺傛暟錛屽錛?
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 緇撴灉涓?錛屽瓧絎?鏈熬榪樺瓨鍦ㄤ竴涓狽ULL緇堟絎?br />sizeof( a2 ); // 緇撴灉涓?*4=12錛堜緷璧栦簬int錛?
涓浜涙湅鍙嬪垰寮濮嬫椂鎶妔izeof褰撲綔浜嗘眰鏁扮粍鍏冪礌鐨勪釜鏁幫紝鐜板湪錛屼綘搴旇鐭ラ亾榪欐槸涓嶅鐨勩傞偅涔堝簲璇ユ庝箞姹傛暟緇勫厓绱犵殑涓暟鍛紵
Easy錛岄氬父鏈変笅闈袱縐嶅啓娉曪細
int c1 = sizeof( a1 ) / sizeof( char );聽聽聽 // 鎬婚暱搴?鍗曚釜鍏冪礌鐨勯暱搴?br />int c2 = sizeof( a1 ) / sizeof( a1[0]); 聽聽 // 鎬婚暱搴?絎竴涓厓绱犵殑闀垮害
鍐欏埌榪欓噷錛屾彁涓闂紝涓嬮潰鐨刢3錛宑4鍊煎簲璇ユ槸澶氬皯鍛紵
*********************************************************
void foo3(char a3[3])
{
聽聽聽聽int c3 = sizeof( a3 ); // c3 ==
}
void foo4(char a4[])
{
聽聽聽聽int c4 = sizeof( a4 ); // c4 ==
}
*********************************************************
涔熻褰撲綘璇曞浘鍥炵瓟c4鐨勫兼椂宸茬粡鎰忚瘑鍒癱3絳旈敊浜嗭紝鏄殑錛宑3!=3銆?
榪欓噷鍑芥暟鍙傛暟a3宸蹭笉鍐嶆槸鏁扮粍綾誨瀷錛岃屾槸铚曞彉鎴愭寚閽堛?/font>鐩稿綋浜巆har* a3錛屼負浠涔堜粩緇嗘兂鎯沖氨涓嶉毦鏄庣櫧銆?
鎴戜滑璋冪敤鍑芥暟foo1鏃訛紝紼嬪簭浼氬湪鏍堜笂鍒嗛厤涓涓ぇ灝忎負3鐨勬暟緇勫悧錛熶笉浼氾紒
鏁扮粍鏄滀紶鍧鈥濈殑錛岃皟鐢ㄨ呭彧闇灝嗗疄鍙傜殑鍦板潃浼犻掕繃鍘伙紝鎵浠3鑷劧涓烘寚閽堢被鍨嬶紙char*錛夛紝c3鐨勫間篃灝變負4銆?
7.string鐨剆izeof
涓涓猻tring鐨勫ぇ灝忎笌瀹冩墍鎸囧悜鐨勫瓧絎︿覆鐨勯暱搴︽棤鍏?/font>銆?br />
*********************************************************
string st1("blog.sina.com.cn");
string st2("majianan");
string st3;
string *ps = &st1;
cout << "st1: " << sizeof(st1) << endl;
cout << "st2: " << sizeof(st2) << endl;
cout << "st3: " << sizeof(st3) << endl;
cout << "ps: " << sizeof(ps) << endl;
cout << "*ps: " << sizeof(*ps) << endl;
*********************************************************
杈撳嚭緇撴灉涓猴細
st1錛?28
st2錛?28
st3錛?28
ps錛?4
*ps錛?28
*********************************************************
瀵逛簬涓嶅悓鐨凷TL錛孲tring綾葷殑緇撴瀯瀹氫箟浼氭湁鎵涓嶅悓
鎵浠ヤ笉鍚岀殑宸ュ叿錛屼緥濡俈C++錛屽拰.NET錛岀粨鏋滀細鏈夋墍涓嶅悓錛?br />鍦╒C++6.0涓紙鎴戠殑鏈哄櫒錛夌粨鏋滄槸16
鍦?NET2003涓粨鏋滄槸28
浣嗘槸瀵逛簬鍚屼竴涓紪璇戝櫒錛岄偅涔堝畠鐨勭粨鏋滈兘鏄竴瀹氱殑
8.寮曠敤鐨剆izeof
sizeof鎿嶄綔絎﹀簲鐢ㄥ湪寮曠敤綾誨瀷涓婄殑鏃跺欙紝榪斿洖鐨勬槸鍖呭惈琚紩鐢ㄥ璞℃墍闇鐨勫唴瀛橀暱搴︼紙鍗寵寮曠敤瀵硅薄鐨勫ぇ灝忥級
*********************************************************
cout << "short:\t" << sizeof(short) << endl;
cout << "short*:\t" << sizeof(short*) << endl;
cout << "short&:\t" << sizeof(short&) << endl;
cout << "short[4]:\t" << sizeof(short[4]) << endl;
cout << "int&:\t" << sizeof(int&) << endl;
*********************************************************
杈撳嚭緇撴灉涓猴細
short錛?2
short*錛?4
short&錛?2
short[4]錛?8
int&錛?4
9. 緇撴瀯浣撶殑sizeof
榪欐槸鍒濆鑰呴棶寰楁渶澶氱殑涓涓棶棰橈紝鎵浠ヨ繖閲屾湁蹇呰澶氳垂鐐圭瑪澧ㄣ傝鎴戜滑鍏堢湅涓涓粨鏋勪綋錛?
struct S1
{
聽聽聽 char c;
聽聽聽 int i;
};
闂畇izeof(s1)絳変簬澶氬皯錛?
鑱槑鐨勪綘寮濮嬫濊冧簡錛宑har鍗?涓瓧鑺傦紝int鍗?涓瓧鑺傦紝閭d箞鍔犺搗鏉ュ氨搴旇鏄?銆?
鏄繖鏍峰悧錛?
浣犲湪浣犳満鍣ㄤ笂璇曡繃浜嗗悧錛?
涔熻浣犳槸瀵圭殑錛屼絾寰堝彲鑳戒綘鏄敊鐨勶紒
VC6涓寜榛樿璁劇疆寰楀埌鐨勭粨鏋滀負8銆?br />
聽聽聽 Why錛熶負浠涔堝彈浼ょ殑鎬繪槸鎴戯紵
璇蜂笉瑕佹伯涓э紝鎴戜滑鏉ュソ濂界悽紓ㄤ竴涓媠izeof鐨勫畾涔?鈥斺?sizeof鐨勭粨鏋滅瓑浜庡璞℃垨鑰呯被鍨嬫墍鍗犵殑鍐呭瓨瀛楄妭鏁般傚ソ鍚э紝閭e氨璁╂垜浠潵鐪嬬湅S1鐨勫唴瀛樺垎閰嶆儏鍐碉細
S1 s1 = { 'a', 0xFFFFFFFF };
瀹氫箟涓婇潰鐨勫彉閲忓悗錛屽姞涓婃柇鐐癸紝榪愯紼嬪簭錛岃瀵焥1鎵鍦ㄧ殑鍐呭瓨錛屼綘鍙戠幇浜嗕粈涔堬紵
浠ユ垜鐨刅C6.0涓轟緥錛宻1鐨勫湴鍧涓?x0012FF78錛屽叾鏁版嵁鍐呭濡備笅錛?
0012FF78: 61 CC CC CC FF FF FF FF
鍙戠幇浜嗕粈涔堬紵鎬庝箞涓棿澶規潅浜?涓瓧鑺傜殑CC錛?
鐪嬬湅MSDN涓婄殑璇存槑錛?
When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.
鍘熸潵濡傛錛岃繖灝辨槸浼犺涓殑瀛楄妭瀵歸綈鍟婏紒涓涓噸瑕佺殑璇濋鍑虹幇浜嗐?
涓轟粈涔堥渶瑕佸瓧鑺傚榻愶紵
璁$畻鏈虹粍鎴愬師鐞嗘暀瀵兼垜浠紝榪欐牱鏈夊姪浜庡姞蹇綆楁満鐨勫彇鏁伴熷害錛屽惁鍒欏氨寰楀鑺辨寚浠ゅ懆鏈熶簡銆?
涓烘錛岀紪璇戝櫒榛樿浼氬緇撴瀯浣撹繘琛屽鐞嗭紙瀹為檯涓婂叾瀹冨湴鏂圭殑鏁版嵁鍙橀噺涔熸槸濡傛錛夛紝璁╁搴︿負2鐨勫熀鏈暟鎹被鍨嬶紙short絳夛級閮戒綅浜庤兘琚?鏁撮櫎鐨勫湴鍧涓婏紝璁╁搴︿負4鐨勫熀鏈暟鎹被鍨嬶紙int絳夛級閮戒綅浜庤兘琚?鏁撮櫎鐨勫湴鍧涓娿?/font>浠ユ綾繪帹錛岃繖鏍鳳紝涓や釜鏁頒腑闂村氨鍙兘闇瑕佸姞鍏ュ~鍏呭瓧鑺傦紝鎵浠ユ暣涓粨鏋勪綋鐨剆izeof鍊煎氨澧為暱浜嗐?
璁╂垜浠氦鎹竴涓婼1涓璫har涓巌nt鐨勪綅緗細
struct S2
{
聽聽聽聽int i;
聽聽聽聽char c;
};
鐪嬬湅sizeof(S2)鐨勭粨鏋滀負澶氬皯錛熸庝箞榪樻槸8銆?
鍐嶇湅鐪嬪唴瀛橈紝鍘熸潵鎴愬憳c鍚庨潰浠嶇劧鏈?涓~鍏呭瓧鑺傘?
榪欏張鏄負浠涔堝晩錛熷埆鐫鎬ワ紝涓嬮潰鎬葷粨瑙勫緥銆?
聽聽聽 瀛楄妭瀵歸綈鐨勭粏鑺傚拰緙栬瘧鍣ㄥ疄鐜扮浉鍏籌紝浣嗕竴鑸岃█錛屾弧瓚充笁涓噯鍒欙細
聽聽聽 1) 緇撴瀯浣撳彉閲忕殑棣栧湴鍧鑳藉琚叾鏈瀹藉熀鏈被鍨嬫垚鍛樼殑澶у皬鎵鏁撮櫎錛?br />聽聽聽 2) 緇撴瀯浣撴瘡涓垚鍛樼浉瀵逛簬緇撴瀯浣撻鍦板潃鐨勫亸縐婚噺錛坥ffset錛夐兘鏄垚鍛樺ぇ灝忕殑鏁存暟鍊嶏紝濡傛湁闇瑕佺紪璇戝櫒浼氬湪鎴愬憳涔嬮棿鍔犱笂濉厖瀛楄妭錛坕nternal adding錛夛紱
聽聽聽 3) 緇撴瀯浣撶殑鎬誨ぇ灝忎負緇撴瀯浣撴渶瀹藉熀鏈被鍨嬫垚鍛樺ぇ灝忕殑鏁存暟鍊嶏紝濡傛湁闇瑕佺紪璇戝櫒浼氬湪鏈鏈竴涓垚鍛樹箣鍚庡姞涓婂~鍏呭瓧鑺傦紙trailing padding錛夈?br />
聽聽聽 瀵逛簬涓婇潰鐨勫噯鍒欙紝鏈夊嚑鐐歸渶瑕佽鏄庯細
1)聽鍓嶉潰涓嶆槸璇寸粨鏋勪綋鎴愬憳鐨勫湴鍧鏄叾澶у皬鐨勬暣鏁板嶏紝鎬庝箞鍙堣鍒板亸縐婚噺浜嗗憿錛?
鍥犱負鏈変簡絎?鐐瑰瓨鍦紝鎵浠ユ垜浠氨鍙互鍙冭檻鎴愬憳鐨勫亸縐婚噺錛岃繖鏍鋒濊冭搗鏉ョ畝鍗曘傛兂鎯充負浠涔堛?
緇撴瀯浣撴煇涓垚鍛樼浉瀵逛簬緇撴瀯浣撻鍦板潃鐨勫亸縐婚噺鍙互閫氳繃瀹弌ffsetof()鏉ヨ幏寰楋紝榪欎釜瀹忎篃鍦╯tddef.h涓畾涔夛紝濡備笅錛?
#define offsetof(s,m) (size_t)&(((s *)0)->m)
渚嬪錛屾兂瑕佽幏寰桽2涓璫鐨勫亸縐婚噺錛屾柟娉曚負
size_t pos = offsetof(S2, c);// pos絳変簬4
2) 鍩烘湰綾誨瀷鏄寚鍓嶉潰鎻愬埌鐨勫儚char銆乻hort銆乮nt銆乫loat銆乨ouble榪欐牱鐨勫唴緗暟鎹被鍨嬨傝繖閲屾墍璇寸殑鈥滄暟鎹搴︹濆氨鏄寚鍏秙izeof鐨勫ぇ灝忋傜敱浜庣粨鏋勪綋鐨勬垚鍛樺彲浠ユ槸澶嶅悎綾誨瀷錛屾瘮濡傚彟澶栦竴涓粨鏋勪綋錛屾墍浠ュ湪瀵繪壘鏈瀹藉熀鏈被鍨嬫垚鍛樻椂錛屽簲褰撳寘鎷鍚堢被鍨嬫垚鍛樼殑瀛愭垚鍛橈紝鑰屼笉鏄妸澶嶅悎鎴愬憳鐪嬫垚鏄竴涓暣浣撱備絾鍦ㄧ‘瀹氬鍚堢被鍨嬫垚鍛樼殑鍋忕Щ浣嶇疆鏃跺垯鏄皢澶嶅悎綾誨瀷浣滀負鏁翠綋鐪嬪緟銆?
榪欓噷鍙欒堪璧鋒潵鏈夌偣鎷楀彛錛屾濊冭搗鏉ヤ篃鏈夌偣鎸犲ご錛岃繕鏄鎴戜滑鐪嬬湅渚嬪瓙鍚э紙鍏蜂綋鏁板間粛浠C6涓轟緥錛屼互鍚庝笉鍐嶈鏄庯級錛?
struct S3
{
聽聽聽聽char c1;
聽聽聽聽S1 s;
聽聽聽聽char c2;
};
S1鐨勬渶瀹界畝鍗曟垚鍛樼殑綾誨瀷涓篿nt錛孲3鍦ㄨ冭檻鏈瀹界畝鍗曠被鍨嬫垚鍛樻椂鏄皢S1鈥滄墦鏁b濈湅鐨勶紝鎵浠3鐨勬渶瀹界畝鍗曠被鍨嬩負int銆傝繖鏍鳳紝閫氳繃S3瀹氫箟鐨勫彉閲忥紝鍏跺瓨鍌ㄧ┖闂撮鍦板潃闇瑕佽4鏁撮櫎錛屾暣涓猻izeof(S3)鐨勫間篃搴旇琚?鏁撮櫎銆?
c1鐨勫亸縐婚噺涓?錛宻鐨勫亸縐婚噺鍛紵榪欐椂s鏄竴涓暣浣擄紝瀹冧綔涓虹粨鏋勪綋鍙橀噺涔熸弧瓚沖墠闈笁涓噯鍒欙紝鎵浠ュ叾澶у皬涓?錛屽亸縐婚噺涓?錛宑1涓巗涔嬮棿渚塊渶瑕?涓~鍏呭瓧鑺傦紝鑰宑2涓巗涔嬮棿灝變笉闇瑕佷簡錛屾墍浠2鐨勫亸縐婚噺涓?2錛岀畻涓奵2鐨勫ぇ灝忎負13錛?3鏄笉鑳借4鏁撮櫎鐨勶紝榪欐牱鏈熬榪樺緱琛ヤ笂3涓~鍏呭瓧鑺傘傛渶鍚庡緱鍒皊izeof(S3)鐨勫間負16銆?
聽聽聽 閫氳繃涓婇潰鐨勫彊榪幫紝鎴戜滑鍙互寰楀埌涓涓叕寮忥細
聽聽聽 緇撴瀯浣撶殑澶у皬絳変簬鏈鍚庝竴涓垚鍛樼殑鍋忕Щ閲忓姞涓婂叾澶у皬鍐嶅姞涓婃湯灝劇殑濉厖瀛楄妭鏁扮洰錛?/strong>鍗籌細
sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( trailing padding )
聽
杈涜緵鑻﹁嫤,榪囪垝鏈嶆棩瀛?
鑸掕垝鏈嶆湇,榪囪緵鑻︽棩瀛?