ºìÁªLinuxÃÅ»§
Linux°ïÖú

Ã÷ÎúC++ÄÚ´æ·ÖÅäµÄÎåÖÖ·½·¨µÄÇø±ð

·¢²¼Ê±¼ä:2006-05-26 10:05:21À´Ô´:ºìÁª×÷Õß:root
¡¡¡¡ÔÚC++ÖУ¬ÄÚ´æ·Ö³É5¸öÇø£¬ËûÃÇ·Ö±ðÊǶѡ¢Õ»¡¢×ÔÓÉ´æ´¢Çø¡¢È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢Çø¡£

¡¡¡¡Õ»£¬¾ÍÊÇÄÇЩÓɱàÒëÆ÷ÔÚÐèÒªµÄʱºò·ÖÅ䣬ÔÚ²»ÐèÒªµÄʱºò×Ô¶¯Çå³þµÄ±äÁ¿µÄ´æ´¢Çø¡£ÀïÃæµÄ±äÁ¿Í¨³£ÊǾֲ¿±äÁ¿¡¢º¯Êý²ÎÊýµÈ¡£

¡¡¡¡¶Ñ£¬¾ÍÊÇÄÇЩÓÉnew·ÖÅäµÄÄÚ´æ¿é£¬ËûÃǵÄÊͷűàÒëÆ÷²»È¥¹Ü£¬ÓÉÎÒÃǵÄÓ¦ÓóÌÐòÈ¥¿ØÖÆ£¬Ò»°ãÒ»¸önew¾ÍÒª¶ÔÓ¦Ò»¸ödelete¡£Èç¹û³ÌÐòԱûÓÐÊͷŵô£¬ÄÇôÔÚ³ÌÐò½áÊøºó£¬²Ù×÷ϵͳ»á×Ô¶¯»ØÊÕ¡£

¡¡¡¡×ÔÓÉ´æ´¢Çø£¬¾ÍÊÇÄÇЩÓÉmallocµÈ·ÖÅäµÄÄÚ´æ¿é£¬ËûºÍ¶ÑÊÇÊ®·ÖÏàËƵģ¬²»¹ýËüÊÇÓÃfreeÀ´½áÊø×Ô¼ºµÄÉúÃüµÄ¡£

¡¡¡¡È«¾Ö/¾²Ì¬´æ´¢Çø£¬È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿±»·ÖÅ䵽ͬһ¿éÄÚ´æÖУ¬ÔÚÒÔÇ°µÄCÓïÑÔÖУ¬È«¾Ö±äÁ¿ÓÖ·ÖΪ³õʼ»¯µÄºÍδ³õʼ»¯µÄ£¬ÔÚC++ÀïÃæûÓÐÕâ¸öÇø·ÖÁË£¬ËûÃǹ²Í¬Õ¼ÓÃͬһ¿éÄÚ´æÇø¡£

¡¡¡¡³£Á¿´æ´¢Çø£¬ÕâÊÇÒ»¿é±È½ÏÌØÊâµÄ´æ´¢Çø£¬ËûÃÇÀïÃæ´æ·ÅµÄÊdz£Á¿£¬²»ÔÊÐíÐ޸ģ¨µ±È»£¬ÄãҪͨ¹ý·ÇÕýµ±ÊÖ¶ÎÒ²¿ÉÒÔÐ޸ģ¬¶øÇÒ·½·¨ºÜ¶à£¬ÔÚ¡¶constµÄ˼¿¼¡·Ò»ÎÄÖУ¬ÎÒ¸ø³öÁË6ÖÖ·½·¨£©

¡¡¡¡Ã÷È·Çø·Ö¶ÑÓëÕ»

¡¡¡¡ÔÚbbsÉÏ£¬¶ÑÓëÕ»µÄÇø·ÖÎÊÌ⣬ËƺõÊÇÒ»¸öÓÀºãµÄ»°Ì⣬Óɴ˿ɼû£¬³õѧÕ߶ԴËÍùÍùÊÇ»ìÏý²»ÇåµÄ£¬ËùÒÔÎÒ¾ö¶¨ÄÃËûµÚÒ»¸ö¿ªµ¶¡£

¡¡¡¡Ê×ÏÈ£¬ÎÒÃǾÙÒ»¸öÀý×Ó£º

void f() { int* p=new int[5]; }

¡¡¡¡ÕâÌõ¶Ì¶ÌµÄÒ»¾ä»°¾Í°üº¬Á˶ÑÓëÕ»£¬¿´µ½new£¬ÎÒÃÇÊ×ÏȾÍÓ¦¸ÃÏëµ½£¬ÎÒÃÇ·ÖÅäÁËÒ»¿é¶ÑÄڴ棬ÄÇôָÕëpÄØ£¿Ëû·ÖÅäµÄÊÇÒ»¿éÕ»Äڴ棬ËùÒÔÕâ¾ä»°µÄÒâ˼¾ÍÊÇ£ºÔÚÕ»ÄÚ´æÖдæ·ÅÁËÒ»¸öÖ¸ÏòÒ»¿é¶ÑÄÚ´æµÄÖ¸Õëp¡£ÔÚ³ÌÐò»áÏÈÈ·¶¨ÔÚ¶ÑÖзÖÅäÄÚ´æµÄ´óС£¬È»ºóµ÷ÓÃoperator new·ÖÅäÄڴ棬Ȼºó·µ»ØÕâ¿éÄÚ´æµÄÊ×µØÖ·£¬·ÅÈëÕ»ÖУ¬ËûÔÚVC6ϵĻã±à´úÂëÈçÏ£º

00401028 push 14h
0040102A call operator new (00401060)
0040102F add esp,4
00401032 mov dword ptr [ebp-8],eax
00401035 mov eax,dword ptr [ebp-8]
00401038 mov dword ptr [ebp-4],eax

¡¡¡¡ÕâÀÎÒÃÇΪÁ˼òµ¥²¢Ã»ÓÐÊÍ·ÅÄڴ棬ÄÇô¸ÃÔõôȥÊÍ·ÅÄØ£¿ÊÇdelete pô£¿°Ä£¬´íÁË£¬Ó¦¸ÃÊÇdelete []p£¬ÕâÊÇΪÁ˸æËß±àÒëÆ÷£ºÎÒɾ³ýµÄÊÇÒ»¸öÊý×飬VC6¾Í»á¸ù¾ÝÏàÓ¦µÄCookieÐÅϢȥ½øÐÐÊÍ·ÅÄÚ´æµÄ¹¤×÷¡£

¡¡¡¡ºÃÁË£¬ÎÒÃǻص½ÎÒÃǵÄÖ÷Ì⣺¶ÑºÍÕ»¾¿¾¹ÓÐʲôÇø±ð£¿

¡¡¡¡Ö÷ÒªµÄÇø±ðÓÉÒÔϼ¸µã£º

¡¡¡¡1¡¢¹ÜÀí·½Ê½²»Í¬£»

¡¡¡¡2¡¢¿Õ¼ä´óС²»Í¬£»

¡¡¡¡3¡¢ÄÜ·ñ²úÉúËéƬ²»Í¬£»

¡¡¡¡4¡¢Éú³¤·½Ïò²»Í¬£»

¡¡¡¡5¡¢·ÖÅ䷽ʽ²»Í¬£»

¡¡¡¡6¡¢·ÖÅäЧÂʲ»Í¬£»

¡¡¡¡¹ÜÀí·½Ê½£º¶ÔÓÚÕ»À´½²£¬ÊÇÓɱàÒëÆ÷×Ô¶¯¹ÜÀí£¬ÎÞÐèÎÒÃÇÊÖ¹¤¿ØÖÆ£»¶ÔÓÚ¶ÑÀ´Ëµ£¬ÊͷŹ¤×÷ÓɳÌÐòÔ±¿ØÖÆ£¬ÈÝÒײúÉúmemory leak¡£

¡¡¡¡¿Õ¼ä´óС£ºÒ»°ãÀ´½²ÔÚ32λϵͳÏ£¬¶ÑÄÚ´æ¿ÉÒÔ´ïµ½4GµÄ¿Õ¼ä£¬´ÓÕâ¸ö½Ç¶ÈÀ´¿´¶ÑÄڴ漸ºõÊÇûÓÐʲôÏÞÖƵġ£µ«ÊǶÔÓÚÕ»À´½²£¬Ò»°ã¶¼ÊÇÓÐÒ»¶¨µÄ¿Õ¼ä´óСµÄ£¬ÀýÈ磬ÔÚVC6ÏÂÃ棬ĬÈϵÄÕ»¿Õ¼ä´óСÊÇ1M£¨ºÃÏñÊÇ£¬¼Ç²»Çå³þÁË£©¡£µ±È»£¬ÎÒÃÇ¿ÉÒÔÐ޸ģº

¡¡¡¡´ò¿ª¹¤³Ì£¬ÒÀ´Î²Ù×÷²Ëµ¥ÈçÏ£ºProject->Setting->Link£¬ÔÚCategory ÖÐÑ¡ÖÐOutput£¬È»ºóÔÚReserveÖÐÉ趨¶ÑÕ»µÄ×î´óÖµºÍcommit¡£

¡¡¡¡×¢Ò⣺reserve×îСֵΪ4Byte£»commitÊDZ£ÁôÔÚÐéÄâÄÚ´æµÄÒ³ÎļþÀïÃ棬ËüÉèÖõĽϴó»áʹջ¿ª±Ù½Ï´óµÄÖµ£¬¿ÉÄÜÔö¼ÓÄÚ´æµÄ¿ªÏúºÍÆô¶¯Ê±¼ä¡£

¡¡¡¡ËéƬÎÊÌ⣺¶ÔÓÚ¶ÑÀ´½²£¬Æµ·±µÄnew/deleteÊƱػáÔì³ÉÄÚ´æ¿Õ¼äµÄ²»Á¬Ðø£¬´Ó¶øÔì³É´óÁ¿µÄËéƬ£¬Ê¹³ÌÐòЧÂʽµµÍ¡£¶ÔÓÚÕ»À´½²£¬Ôò²»»á´æÔÚÕâ¸öÎÊÌ⣬ÒòΪջÊÇÏȽøºó³öµÄ¶ÓÁУ¬ËûÃÇÊÇÈç´ËµÄÒ»Ò»¶ÔÓ¦£¬ÒÔÖÁÓÚÓÀÔ¶¶¼²»¿ÉÄÜÓÐÒ»¸öÄÚ´æ¿é´ÓÕ»Öм䵯³ö£¬ÔÚËûµ¯³ö֮ǰ£¬ÔÚËûÉÏÃæµÄºó½øµÄÕ»ÄÚÈÝÒѾ­±»µ¯³ö£¬ÏêϸµÄ¿ÉÒԲο¼Êý¾Ý½á¹¹£¬ÕâÀïÎÒÃǾͲ»ÔÙÒ»Ò»ÌÖÂÛÁË¡£

¡¡¡¡Éú³¤·½Ïò£º¶ÔÓÚ¶ÑÀ´½²£¬Éú³¤·½ÏòÊÇÏòÉϵģ¬Ò²¾ÍÊÇÏò×ÅÄÚ´æµØÖ·Ôö¼ÓµÄ·½Ïò£»¶ÔÓÚÕ»À´½²£¬ËüµÄÉú³¤·½ÏòÊÇÏòϵģ¬ÊÇÏò×ÅÄÚ´æµØÖ·¼õСµÄ·½ÏòÔö³¤¡£

¡¡¡¡·ÖÅ䷽ʽ£º¶Ñ¶¼ÊǶ¯Ì¬·ÖÅäµÄ£¬Ã»Óо²Ì¬·ÖÅäµÄ¶Ñ¡£Õ»ÓÐ2ÖÖ·ÖÅ䷽ʽ£º¾²Ì¬·ÖÅäºÍ¶¯Ì¬·ÖÅä¡£¾²Ì¬·ÖÅäÊDZàÒëÆ÷Íê³ÉµÄ£¬±ÈÈç¾Ö²¿±äÁ¿µÄ·ÖÅä¡£¶¯Ì¬·ÖÅäÓÉallocaº¯Êý½øÐзÖÅ䣬µ«ÊÇÕ»µÄ¶¯Ì¬·ÖÅäºÍ¶ÑÊDz»Í¬µÄ£¬ËûµÄ¶¯Ì¬·ÖÅäÊÇÓɱàÒëÆ÷½øÐÐÊÍ·Å£¬ÎÞÐèÎÒÃÇÊÖ¹¤ÊµÏÖ¡£

¡¡¡¡·ÖÅäЧÂÊ£ºÕ»ÊÇ»úÆ÷ϵͳÌṩµÄÊý¾Ý½á¹¹£¬¼ÆËã»ú»áÔڵײã¶ÔÕ»Ìṩ֧³Ö£º·ÖÅäרÃŵļĴæÆ÷´æ·ÅÕ»µÄµØÖ·£¬Ñ¹Õ»³öÕ»¶¼ÓÐרÃŵÄÖ¸ÁîÖ´ÐУ¬Õâ¾Í¾ö¶¨ÁËÕ»µÄЧÂʱȽϸߡ£¶ÑÔòÊÇC/C++º¯Êý¿âÌṩµÄ£¬ËüµÄ»úÖÆÊǺܸ´Ôӵģ¬ÀýÈçΪÁË·ÖÅäÒ»¿éÄڴ棬¿âº¯Êý»á°´ÕÕÒ»¶¨µÄËã·¨£¨¾ßÌåµÄËã·¨¿ÉÒԲο¼Êý¾Ý½á¹¹/²Ù×÷ϵͳ£©ÔÚ¶ÑÄÚ´æÖÐËÑË÷¿ÉÓõÄ×ã¹»´óСµÄ¿Õ¼ä£¬Èç¹ûûÓÐ×ã¹»´óСµÄ¿Õ¼ä£¨¿ÉÄÜÊÇÓÉÓÚÄÚ´æËéƬ̫¶à£©£¬¾ÍÓпÉÄܵ÷ÓÃϵͳ¹¦ÄÜÈ¥Ôö¼Ó³ÌÐòÊý¾Ý¶ÎµÄÄÚ´æ¿Õ¼ä£¬ÕâÑù¾ÍÓлú»á·Öµ½×ã¹»´óСµÄÄڴ棬Ȼºó½øÐзµ»Ø¡£ÏÔÈ»£¬¶ÑµÄЧÂʱÈÕ»ÒªµÍµÃ¶à¡£

¡¡¡¡´ÓÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½£¬¶ÑºÍÕ»Ïà±È£¬ÓÉÓÚ´óÁ¿new/deleteµÄʹÓã¬ÈÝÒ×Ôì³É´óÁ¿µÄÄÚ´æËéƬ£»ÓÉÓÚûÓÐרÃŵÄϵͳ֧³Ö£¬Ð§Âʺܵͣ»ÓÉÓÚ¿ÉÄÜÒý·¢Óû§Ì¬ºÍºËÐÄ̬µÄÇл»£¬ÄÚ´æµÄÉêÇ룬´ú¼Û±äµÃ¸ü¼Ó°º¹ó¡£ËùÒÔÕ»ÔÚ³ÌÐòÖÐÊÇÓ¦ÓÃ×î¹ã·ºµÄ£¬¾ÍËãÊǺ¯ÊýµÄµ÷ÓÃÒ²ÀûÓÃջȥÍê³É£¬º¯Êýµ÷Óùý³ÌÖеIJÎÊý£¬·µ»ØµØÖ·£¬EBPºÍ¾Ö²¿±äÁ¿¶¼²ÉÓÃÕ»µÄ·½Ê½´æ·Å¡£ËùÒÔ£¬ÎÒÃÇÍƼö´ó¼Ò¾¡Á¿ÓÃÕ»£¬¶ø²»ÊÇÓöѡ£

¡¡¡¡ËäȻջÓÐÈç´ËÖÚ¶àµÄºÃ´¦£¬µ«ÊÇÓÉÓںͶÑÏà±È²»ÊÇÄÇôÁé»î£¬ÓÐʱºò·ÖÅä´óÁ¿µÄÄÚ´æ¿Õ¼ä£¬»¹ÊÇÓöѺÃһЩ¡£

¡¡¡¡ÎÞÂÛÊǶѻ¹ÊÇÕ»£¬¶¼Òª·ÀÖ¹Ô½½çÏÖÏóµÄ·¢Éú£¨³ý·ÇÄãÊǹÊÒâʹÆäÔ½½ç£©£¬ÒòΪԽ½çµÄ½á¹ûҪôÊdzÌÐò±ÀÀ££¬ÒªÃ´ÊǴݻٳÌÐòµÄ¶Ñ¡¢Õ»½á¹¹£¬²úÉúÒÔÏë²»µ½µÄ½á¹û,¾ÍËãÊÇÔÚÄãµÄ³ÌÐòÔËÐйý³ÌÖУ¬Ã»Óз¢ÉúÉÏÃæµÄÎÊÌ⣬Ä㻹ÊÇҪСÐÄ£¬Ëµ²»¶¨Ê²Ã´Ê±ºò¾Í±Àµô£¬ÄÇʱºòdebug¿ÉÊÇÏ൱À§Äѵġ£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. mcsemcse ÓÚ 2006-06-27 09:10:35·¢±í:

    ¶¥1ÏÂ~