| ²é¿´: 400 | »Ø¸´: 2 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
sdlj8051½ð³æ (ÖøÃûдÊÖ)
|
[½»Á÷]
¡¾×ªÌû¡¿¶ÑºÍÕ»µÄÇø±ð
|
||
|
¶ÑºÍÕ»µÄÇø±ð Ò»¡¢Ô¤±¸ÖªÊ¶¡ª³ÌÐòµÄÄÚ´æ·ÖÅä Ò»¸öÓÉc/C++±àÒëµÄ³ÌÐòÕ¼ÓõÄÄÚ´æ·ÖΪÒÔϼ¸¸ö²¿·Ö 1¡¢Õ»Çø£¨stack£©¡ª ÓɱàÒëÆ÷×Ô¶¯·ÖÅäÊÍ·Å £¬´æ·Åº¯ÊýµÄ²ÎÊýÖµ£¬¾Ö²¿±äÁ¿µÄÖµµÈ¡£Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£ 2¡¢¶ÑÇø£¨heap£© ¡ª Ò»°ãÓɳÌÐòÔ±·ÖÅäÊÍ·Å£¬ Èô³ÌÐòÔ±²»ÊÍ·Å£¬³ÌÐò½áÊøÊ±¿ÉÄÜÓÉOS»ØÊÕ ¡£×¢ÒâËüÓëÊý¾Ý½á¹¹ÖеĶÑÊÇÁ½»ØÊ£¬·ÖÅ䷽ʽµ¹ÊÇÀàËÆÓÚÁ´±í£¬ºÇºÇ¡£ 3¡¢È«¾ÖÇø£¨¾²Ì¬Çø£©£¨static£©¡ª£¬È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿µÄ´æ´¢ÊÇ·ÅÔÚÒ»¿éµÄ£¬³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿ÔÚÒ»¿éÇøÓò£¬ δ³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍδ³õʼ»¯µÄ¾²Ì¬±äÁ¿ÔÚÏàÁÚµÄÁíÒ»¿éÇøÓò¡£ - ³ÌÐò½áÊøºóÓÐϵͳÊÍ·Å 4¡¢ÎÄ×Ö³£Á¿Çø¡ª³£Á¿×Ö·û´®¾ÍÊÇ·ÅÔÚÕâÀïµÄ¡£ ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å 5¡¢³ÌÐò´úÂëÇø¡ª´æ·Åº¯ÊýÌåµÄ¶þ½øÖÆ´úÂë¡£ ¶þ¡¢Àý×Ó³ÌÐò ÕâÊÇÒ»¸öǰ±²Ð´µÄ£¬·Ç³£Ïêϸ //main.cpp int a = 0; È«¾Ö³õʼ»¯Çø char *p1; È«¾Öδ³õʼ»¯Çø main() { int b; Õ» char s[] = "abc"; Õ» char *p2; Õ» char *p3 = "123456"; 123456\0ÔÚ³£Á¿Çø£¬p3ÔÚÕ»ÉÏ¡£ static int c =0£» È«¾Ö£¨¾²Ì¬£©³õʼ»¯Çø p1 = (char *)malloc(10); p2 = (char *)malloc(20); ·ÖÅäµÃÀ´µÃ10ºÍ20×Ö½ÚµÄÇøÓò¾ÍÔÚ¶ÑÇø¡£ strcpy(p1, "123456" ; 123456\0·ÅÔÚ³£Á¿Çø£¬±àÒëÆ÷¿ÉÄܻὫËüÓëp3ËùÖ¸ÏòµÄ"123456"ÓÅ»¯³ÉÒ»¸öµØ·½¡£ } ¶þ¡¢¶ÑºÍÕ»µÄÀíÂÛ֪ʶ 2.1ÉêÇ뷽ʽ stack: ÓÉϵͳ×Ô¶¯·ÖÅä¡£ ÀýÈ磬ÉùÃ÷ÔÚº¯ÊýÖÐÒ»¸ö¾Ö²¿±äÁ¿ int b; ϵͳ×Ô¶¯ÔÚÕ»ÖÐΪb¿ª±Ù¿Õ¼ä heap: ÐèÒª³ÌÐòÔ±×Ô¼ºÉêÇ룬²¢Ö¸Ã÷´óС£¬ÔÚcÖÐmallocº¯Êý Èçp1 = (char *)malloc(10); ÔÚC++ÖÐÓÃnewÔËËã·û Èçp2 = (char *)malloc(10); µ«ÊÇ×¢Òâp1¡¢p2±¾ÉíÊÇÔÚÕ»Öеġ£ 2.2 ÉêÇëºóϵͳµÄÏìÓ¦ Õ»£ºÖ»ÒªÕ»µÄÊ£Óà¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼ä£¬ÏµÍ³½«Îª³ÌÐòÌṩÄڴ棬·ñÔò½«±¨Òì³£ÌáʾջÒç³ö¡£ ¶Ñ£ºÊ×ÏÈÓ¦¸ÃÖªµÀ²Ù×÷ϵͳÓÐÒ»¸ö¼Ç¼¿ÕÏÐÄÚ´æµØÖ·µÄÁ´±í£¬µ±ÏµÍ³ÊÕµ½³ÌÐòµÄÉêÇëʱ£¬ »á±éÀú¸ÃÁ´±í£¬Ñ°ÕÒµÚÒ»¸ö¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼äµÄ¶Ñ½áµã£¬È»ºó½«¸Ã½áµã´Ó¿ÕÏнáµãÁ´±íÖÐɾ³ý£¬²¢½«¸Ã½áµãµÄ¿Õ¼ä·ÖÅ䏸³ÌÐò£¬ÁíÍ⣬¶ÔÓÚ´ó¶àÊýϵͳ£¬»áÔÚÕâ¿éÄÚ´æ¿Õ¼äÖеÄÊ×µØÖ·´¦¼Ç¼±¾´Î·ÖÅäµÄ´óС£¬ÕâÑù£¬´úÂëÖеÄdeleteÓï¾ä²ÅÄÜÕýÈ·µÄÊͷű¾ÄÚ´æ¿Õ¼ä¡£ÁíÍ⣬ÓÉÓÚÕÒµ½µÄ¶Ñ½áµãµÄ´óС²»Ò»¶¨ÕýºÃµÈÓÚÉêÇëµÄ´óС£¬ÏµÍ³»á×Ô¶¯µÄ½«¶àÓàµÄÄDz¿·ÖÖØÐ·ÅÈë¿ÕÏÐÁ´±íÖС£ 2.3ÉêÇë´óСµÄÏÞÖÆ Õ»£ºÔÚWindowsÏÂ,Õ»ÊÇÏòµÍµØÖ·À©Õ¹µÄÊý¾Ý½á¹¹£¬ÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æµÄÇøÓò¡£Õâ¾ä»°µÄÒâ˼ÊÇÕ»¶¥µÄµØÖ·ºÍÕ»µÄ×î´óÈÝÁ¿ÊÇϵͳԤÏȹ涨ºÃµÄ£¬ÔÚWINDOWSÏ£¬Õ»µÄ´óСÊÇ2M£¨Ò²ÓеÄ˵ÊÇ1M£¬×ÜÖ®ÊÇÒ»¸ö±àÒëʱ¾ÍÈ·¶¨µÄ³£Êý£©£¬Èç¹ûÉêÇëµÄ¿Õ¼ä³¬¹ýÕ»µÄÊ£Óà¿Õ¼äʱ£¬½«Ìáʾoverflow¡£Òò´Ë£¬ÄÜ´ÓÕ»»ñµÃµÄ¿Õ¼ä½ÏС¡£ ¶Ñ£º¶ÑÊÇÏò¸ßµØÖ·À©Õ¹µÄÊý¾Ý½á¹¹£¬ÊDz»Á¬ÐøµÄÄÚ´æÇøÓò¡£ÕâÊÇÓÉÓÚϵͳÊÇÓÃÁ´±íÀ´´æ´¢µÄ¿ÕÏÐÄÚ´æµØÖ·µÄ£¬×ÔÈ»ÊDz»Á¬ÐøµÄ£¬¶øÁ´±íµÄ±éÀú·½ÏòÊÇÓɵ͵ØÖ·Ïò¸ßµØÖ·¡£¶ÑµÄ´óСÊÜÏÞÓÚ¼ÆËã»úϵͳÖÐÓÐЧµÄÐéÄâÄÚ´æ¡£Óɴ˿ɼû£¬¶Ñ»ñµÃµÄ¿Õ¼ä±È½ÏÁé»î£¬Ò²±È½Ï´ó¡£ 2.4ÉêÇëЧÂʵıȽϣº Õ»ÓÉϵͳ×Ô¶¯·ÖÅ䣬ËٶȽϿ졣µ«³ÌÐòÔ±ÊÇÎÞ·¨¿ØÖƵġ£ ¶ÑÊÇÓÉnew·ÖÅäµÄÄڴ棬һ°ãËٶȱȽÏÂý£¬¶øÇÒÈÝÒײúÉúÄÚ´æË鯬,²»¹ýÓÃÆðÀ´×î·½±ã. ÁíÍ⣬ÔÚWINDOWSÏ£¬×îºÃµÄ·½Ê½ÊÇÓÃVirtualAlloc·ÖÅäÄڴ棬Ëû²»ÊÇÔÚ¶Ñ£¬Ò²²»ÊÇÔÚÕ»ÊÇÖ±½ÓÔÚ½ø³ÌµÄµØÖ·¿Õ¼äÖб£ÁôÒ»¿ìÄڴ棬ËäÈ»ÓÃÆðÀ´×î²»·½±ã¡£µ«ÊÇËٶȿ죬Ҳ×îÁé»î¡£ 2.5¶ÑºÍÕ»ÖеĴ洢ÄÚÈÝ Õ»£º ÔÚº¯Êýµ÷ÓÃʱ£¬µÚÒ»¸ö½øÕ»µÄÊÇÖ÷º¯ÊýÖкóµÄÏÂÒ»ÌõÖ¸Áº¯Êýµ÷ÓÃÓï¾äµÄÏÂÒ»Ìõ¿ÉÖ´ÐÐÓï¾ä£©µÄµØÖ·£¬È»ºóÊǺ¯ÊýµÄ¸÷¸ö²ÎÊý£¬ÔÚ´ó¶àÊýµÄC±àÒëÆ÷ÖУ¬²ÎÊýÊÇÓÉÓÒÍù×óÈëÕ»µÄ£¬È»ºóÊǺ¯ÊýÖеľֲ¿±äÁ¿¡£×¢Ò⾲̬±äÁ¿ÊDz»ÈëÕ»µÄ¡£ µ±±¾´Îº¯Êýµ÷ÓýáÊøºó£¬¾Ö²¿±äÁ¿ÏȳöÕ»£¬È»ºóÊDzÎÊý£¬×îºóÕ»¶¥Ö¸ÕëÖ¸Ïò×ʼ´æµÄµØÖ·£¬Ò²¾ÍÊÇÖ÷º¯ÊýÖеÄÏÂÒ»ÌõÖ¸Á³ÌÐòÓɸõã¼ÌÐøÔËÐС£ ¶Ñ£ºÒ»°ãÊÇÔڶѵÄÍ·²¿ÓÃÒ»¸ö×Ö½Ú´æ·Å¶ÑµÄ´óС¡£¶ÑÖеľßÌåÄÚÈÝÓгÌÐòÔ±°²ÅÅ¡£ 2.6´æÈ¡Ð§ÂÊµÄ±È½Ï char s1[] = "aaaaaaaaaaaaaaa"; char *s2 = "bbbbbbbbbbbbbbbbb"; aaaaaaaaaaaÊÇÔÚÔËÐÐʱ¿Ì¸³ÖµµÄ£» ¶øbbbbbbbbbbbÊÇÔÚ±àÒëʱ¾ÍÈ·¶¨µÄ£» µ«ÊÇ£¬ÔÚÒÔºóµÄ´æÈ¡ÖУ¬ÔÚÕ»ÉϵÄÊý×é±ÈÖ¸ÕëËùÖ¸ÏòµÄ×Ö·û´®(ÀýÈç¶Ñ)¿ì¡£ ±ÈÈ磺 #include void main() { char a = 1; char c[] = "1234567890"; char *p ="1234567890"; a = c[1]; a = p[1]; return; } ¶ÔÓ¦µÄ»ã±à´úÂë 10: a = c[1]; 00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 0040106A 88 4D FC mov byte ptr [ebp-4],cl 11: a = p[1]; 0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] 00401070 8A 42 01 mov al,byte ptr [edx+1] 00401073 88 45 FC mov byte ptr [ebp-4],al µÚÒ»ÖÖÔÚ¶Áȡʱֱ½Ó¾Í°Ñ×Ö·û´®ÖеÄÔªËØ¶Áµ½¼Ä´æÆ÷clÖУ¬¶øµÚ¶þÖÖÔòÒªÏȰÑÖ¸ÕëÖµ¶Áµ½edxÖУ¬ÔÚ¸ù¾Ýedx¶ÁÈ¡×Ö·û£¬ÏÔÈ»ÂýÁË¡£ 2.7С½á£º ¶ÑºÍÕ»µÄÇø±ð¿ÉÒÔÓÃÈçϵıÈÓ÷À´¿´³ö£º ʹÓÃÕ»¾ÍÏóÎÒÃÇÈ¥·¹¹ÝÀï³Ô·¹£¬Ö»¹Üµã²Ë£¨·¢³öÉêÇ룩¡¢¸¶Ç®¡¢ºÍ³Ô£¨Ê¹Óã©£¬³Ô±¥Á˾Í×ߣ¬²»±ØÀí»áÇвˡ¢Ï´²ËµÈ×¼±¸¹¤×÷ºÍÏ´Í롢ˢ¹øµÈɨβ¹¤×÷£¬ËûµÄºÃ´¦ÊÇ¿ì½Ý£¬µ«ÊÇ×ÔÓɶÈС¡£ ʹÓöѾÍÏóÊÇ×Ô¼º¶¯ÊÖ×öϲ»¶³ÔµÄ²ËëÈ£¬±È½ÏÂé·³£¬µ«ÊDZȽϷûºÏ×Ô¼ºµÄ¿Ú棬¶øÇÒ×ÔÓÉ¶È´ó¡£ windows½ø³ÌÖеÄÄÚ´æ½á¹¹ ÔÚÔĶÁ±¾ÎÄ֮ǰ£¬Èç¹ûÄãÁ¬¶ÑÕ»ÊÇʲô¶à²»ÖªµÀµÄ»°£¬ÇëÏÈÔĶÁÎÄÕºóÃæµÄ»ù´¡ÖªÊ¶¡£ ½Ó´¥¹ý±à³ÌµÄÈ˶¼ÖªµÀ£¬¸ß¼¶ÓïÑÔ¶¼ÄÜͨ¹ý±äÁ¿ÃûÀ´·ÃÎÊÄÚ´æÖеÄÊý¾Ý¡£ÄÇôÕâЩ±äÁ¿ÔÚÄÚ´æÖÐÊÇÈçºÎ´æ·ÅµÄÄØ£¿³ÌÐòÓÖÊÇÈçºÎʹÓÃÕâЩ±äÁ¿µÄÄØ£¿ÏÂÃæ¾Í»á¶Ô´Ë½øÐÐÉîÈëµÄÌÖÂÛ¡£ÏÂÎÄÖеÄCÓïÑÔ´úÂëÈçûÓÐÌØ±ðÉùÃ÷£¬Ä¬È϶¼Ê¹ÓÃVC±àÒëµÄrelease°æ¡£ Ê×ÏÈ£¬À´Á˽âһϠC ÓïÑԵıäÁ¿ÊÇÈçºÎÔÚÄÚ´æ·Ö²¿µÄ¡£C ÓïÑÔÓÐÈ«¾Ö±äÁ¿(Global)¡¢±¾µØ±äÁ¿(Local)£¬¾²Ì¬±äÁ¿(Static)¡¢¼Ä´æÆ÷±äÁ¿(Regeister)¡£Ã¿ÖÖ±äÁ¿¶¼Óв»Í¬µÄ·ÖÅ䷽ʽ¡£ÏÈÀ´¿´ÏÂÃæÕâ¶Î´úÂ룺 #include int g1=0, g2=0, g3=0; int main() { static int s1=0, s2=0, s3=0; int v1=0, v2=0, v3=0; //´òÓ¡³ö¸÷¸ö±äÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",&v1); //´òÓ¡¸÷±¾µØ±äÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",&v2); printf("0x%08x\n\n",&v3); printf("0x%08x\n",&g1); //´òÓ¡¸÷È«¾Ö±äÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",&g2); printf("0x%08x\n\n",&g3); printf("0x%08x\n",&s1); //´òÓ¡¸÷¾²Ì¬±äÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",&s2); printf("0x%08x\n\n",&s3); return 0; } ±àÒëºóµÄÖ´Ðнá¹ûÊÇ£º 0x0012ff78 0x0012ff7c 0x0012ff80 0x004068d0 0x004068d4 0x004068d8 0x004068dc 0x004068e0 0x004068e4 Êä³öµÄ½á¹û¾ÍÊDZäÁ¿µÄÄÚ´æµØÖ·¡£ÆäÖÐv1,v2,v3ÊDZ¾µØ±äÁ¿£¬g1,g2,g3ÊÇÈ«¾Ö±äÁ¿£¬s1,s2,s3ÊǾ²Ì¬±äÁ¿¡£Äã¿ÉÒÔ¿´µ½ÕâЩ±äÁ¿ÔÚÄÚ´æÊÇÁ¬Ðø·Ö²¼µÄ£¬µ«ÊDZ¾µØ±äÁ¿ºÍÈ«¾Ö±äÁ¿·ÖÅäµÄÄÚ´æµØÖ·²îÁËÊ®Íò°ËǧÀ¶øÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿·ÖÅäµÄÄÚ´æÊÇÁ¬ÐøµÄ¡£ÕâÊÇÒòΪ±¾µØ±äÁ¿ºÍÈ«¾Ö/¾²Ì¬±äÁ¿ÊÇ·ÖÅäÔÚ²»Í¬ÀàÐ͵ÄÄÚ´æÇøÓòÖеĽá¹û¡£¶ÔÓÚÒ»¸ö½ø³ÌµÄÄÚ´æ¿Õ¼ä¶øÑÔ£¬¿ÉÒÔÔÚÂß¼ÉÏ·Ö³É3¸ö²¿·Ý£º´úÂëÇø£¬¾²Ì¬Êý¾ÝÇøºÍ¶¯Ì¬Êý¾ÝÇø¡£¶¯Ì¬Êý¾ÝÇøÒ»°ã¾ÍÊÇ¡°¶ÑÕ»¡±¡£¡°Õ»(stack)¡±ºÍ¡°¶Ñ(heap)¡±ÊÇÁ½ÖÖ²»Í¬µÄ¶¯Ì¬Êý¾ÝÇø£¬Õ»ÊÇÒ»ÖÖÏßÐԽṹ£¬¶ÑÊÇÒ»ÖÖÁ´Ê½½á¹¹¡£½ø³ÌµÄÿ¸öÏ̶߳¼ÓÐ˽Óеġ°Õ»¡±£¬ËùÒÔÿ¸öÏß³ÌËäÈ»´úÂëÒ»Ñù£¬µ«±¾µØ±äÁ¿µÄÊý¾Ý¶¼ÊÇ»¥²»¸ÉÈÅ¡£Ò»¸ö¶ÑÕ»¿ÉÒÔͨ¹ý¡°»ùµØÖ·¡±ºÍ¡°Õ»¶¥¡±µØÖ·À´ÃèÊö¡£È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿·ÖÅäÔÚ¾²Ì¬Êý¾ÝÇø£¬±¾µØ±äÁ¿·ÖÅäÔÚ¶¯Ì¬Êý¾ÝÇø£¬¼´¶ÑÕ»ÖС£³ÌÐòͨ¹ý¶ÑÕ»µÄ»ùµØÖ·ºÍÆ«ÒÆÁ¿À´·ÃÎʱ¾µØ±äÁ¿¡£ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©ÈµÍ¶ËÄÚ´æÇøÓò ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ ¶¯Ì¬Êý¾ÝÇø ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ ´úÂëÇø ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ ¾²Ì¬Êý¾ÝÇø ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È¸ß¶ËÄÚ´æÇøÓò ¶ÑÕ»ÊÇÒ»¸öÏȽøºó³öµÄÊý¾Ý½á¹¹£¬Õ»¶¥µØÖ·×ÜÊÇСÓÚµÈÓÚÕ»µÄ»ùµØÖ·¡£ÎÒÃÇ¿ÉÒÔÏÈÁ˽âһϺ¯Êýµ÷ÓõĹý³Ì£¬ÒÔ±ã¶Ô¶ÑÕ»ÔÚ³ÌÐòÖеÄ×÷ÓÃÓиüÉîÈëµÄÁ˽⡣²»Í¬µÄÓïÑÔÓв»Í¬µÄº¯Êýµ÷Óù涨£¬ÕâЩÒòËØÓвÎÊýµÄѹÈë¹æÔòºÍ¶ÑÕ»µÄƽºâ¡£windows APIµÄµ÷ÓùæÔòºÍANSI CµÄº¯Êýµ÷ÓùæÔòÊDz»Ò»ÑùµÄ£¬Ç°ÕßÓɱ»µ÷º¯Êýµ÷Õû¶ÑÕ»£¬ºóÕßÓɵ÷ÓÃÕßµ÷Õû¶ÑÕ»¡£Á½Õßͨ¹ý¡°__stdcall¡±ºÍ¡°__cdecl¡±Ç°×ºÇø·Ö¡£ÏÈ¿´ÏÂÃæÕâ¶Î´úÂ룺 #include void __stdcall func(int param1,int param2,int param3) { int var1=param1; int var2=param2; int var3=param3; printf("0x%08x\n",¶m1); //´òÓ¡³ö¸÷¸ö±äÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",¶m2); printf("0x%08x\n\n",¶m3); printf("0x%08x\n",&var1); printf("0x%08x\n",&var2); printf("0x%08x\n\n",&var3); return; } int main() { func(1,2,3); return 0; } ±àÒëºóµÄÖ´Ðнá¹ûÊÇ£º 0x0012ff78 0x0012ff7c 0x0012ff80 0x0012ff68 0x0012ff6c 0x0012ff70 ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ªº¯ÊýÖ´ÐÐʱµÄÕ»¶¥£¨ESP£©¡¢µÍ¶ËÄÚ´æÇøÓò ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ var 1 ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ var 2 ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ var 3 ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ RET ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ª¡°__cdecl¡±º¯Êý·µ»ØºóµÄÕ»¶¥£¨ESP£© ©¦ parameter 1 ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ parameter 2 ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ parameter 3 ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ª¡°__stdcall¡±º¯Êý·µ»ØºóµÄÕ»¶¥£¨ESP£© ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ªÕ»µ×£¨»ùµØÖ· EBP£©¡¢¸ß¶ËÄÚ´æÇøÓò ÉÏͼ¾ÍÊǺ¯Êýµ÷Óùý³ÌÖжÑÕ»µÄÑù×ÓÁË¡£Ê×ÏÈ£¬Èý¸ö²ÎÊýÒÔ´ÓÓÖµ½×óµÄ´ÎÐòѹÈë¶ÑÕ»£¬ÏÈѹ¡°param3¡±£¬ÔÙѹ¡°param2¡±£¬×îºóѹÈë¡°param1¡±£»È»ºóѹÈ뺯ÊýµÄ·µ»ØµØÖ·(RET)£¬½Ó×ÅÌø×ªµ½º¯ÊýµØÖ·½Ó×ÅÖ´ÐУ¨ÕâÀïÒª²¹³äÒ»µã£¬½éÉÜUNIXÏµĻº³åÒç³öÔÀíµÄÎÄÕÂÖж¼Ìáµ½ÔÚѹÈëRETºó£¬¼ÌÐøÑ¹È뵱ǰEBP£¬È»ºóÓõ±Ç°ESP´úÌæEBP¡£È»¶ø£¬ÓÐһƪ½éÉÜwindowsϺ¯Êýµ÷ÓõÄÎÄÕÂÖÐ˵£¬ÔÚwindowsϵĺ¯Êýµ÷ÓÃÒ²ÓÐÕâÒ»²½Ö裬µ«¸ù¾ÝÎÒµÄʵ¼Êµ÷ÊÔ£¬²¢Î´·¢ÏÖÕâÒ»²½£¬Õ⻹¿ÉÒÔ´Óparam3ºÍvar1Ö®¼äÖ»ÓÐ4×ֽڵļä϶Õâµã¿´³öÀ´£©£»µÚÈý²½£¬½«Õ»¶¥(ESP)¼õÈ¥Ò»¸öÊý£¬Îª±¾µØ±äÁ¿·ÖÅäÄÚ´æ¿Õ¼ä£¬ÉÏÀýÖÐÊǼõÈ¥12×Ö½Ú(ESP=ESP-3*4£¬Ã¿¸öint±äÁ¿Õ¼ÓÃ4¸ö×Ö½Ú)£»½Óמͳõʼ»¯±¾µØ±äÁ¿µÄÄÚ´æ¿Õ¼ä¡£ÓÉÓÚ¡°__stdcall¡±µ÷ÓÃÓɱ»µ÷º¯Êýµ÷Õû¶ÑÕ»£¬ËùÒÔÔÚº¯Êý·µ»ØÇ°Òª»Ö¸´¶ÑÕ»£¬ÏÈ»ØÊÕ±¾µØ±äÁ¿Õ¼ÓõÄÄÚ´æ(ESP=ESP+3*4)£¬È»ºóÈ¡³ö·µ»ØµØÖ·£¬ÌîÈëEIP¼Ä´æÆ÷£¬»ØÊÕÏÈǰѹÈë²ÎÊýÕ¼ÓõÄÄÚ´æ(ESP=ESP+3*4)£¬¼ÌÐøÖ´Ðе÷ÓÃÕߵĴúÂë¡£²Î¼ûÏÂÁлã±à´úÂ룺 ;--------------func º¯ÊýµÄ»ã±à´úÂë------------------- :00401000 83EC0C sub esp, 0000000C //´´½¨±¾µØ±äÁ¿µÄÄÚ´æ¿Õ¼ä :00401003 8B442410 mov eax, dword ptr [esp+10] :00401007 8B4C2414 mov ecx, dword ptr [esp+14] :0040100B 8B542418 mov edx, dword ptr [esp+18] :0040100F 89442400 mov dword ptr [esp], eax :00401013 8D442410 lea eax, dword ptr [esp+10] :00401017 894C2404 mov dword ptr [esp+04], ecx ¡¡¡¡¡¡¡¡£¨Ê¡ÂÔÈô¸É´úÂ룩 :00401075 83C43C add esp, 0000003C ;»Ö¸´¶ÑÕ»£¬»ØÊÕ±¾µØ±äÁ¿µÄÄÚ´æ¿Õ¼ä :00401078 C3 ret 000C ;º¯Êý·µ»Ø£¬»Ö¸´²ÎÊýÕ¼ÓõÄÄÚ´æ¿Õ¼ä ;Èç¹ûÊÇ¡°__cdecl¡±µÄ»°£¬ÕâÀïÊÇ¡°ret¡±£¬¶ÑÕ»½«Óɵ÷ÓÃÕ߻ָ´ ;-------------------º¯Êý½áÊø------------------------- ;--------------Ö÷³ÌÐòµ÷ÓÃfuncº¯ÊýµÄ´úÂë-------------- :00401080 6A03 push 00000003 //ѹÈë²ÎÊýparam3 :00401082 6A02 push 00000002 //ѹÈë²ÎÊýparam2 :00401084 6A01 push 00000001 //ѹÈë²ÎÊýparam1 :00401086 E875FFFFFF call 00401000 //µ÷ÓÃfuncº¯Êý ;Èç¹ûÊÇ¡°__cdecl¡±µÄ»°£¬½«ÔÚÕâÀï»Ö¸´¶ÑÕ»£¬¡°add esp, 0000000C¡± ´ÏÃ÷µÄ¶ÁÕß¿´µ½ÕâÀ²î²»¶à¾ÍÃ÷°×»º³åÒç³öµÄÔÀíÁË¡£ÏÈÀ´¿´ÏÂÃæµÄ´úÂ룺 #include #include void __stdcall func() { char lpBuff[8]="\0"; strcat(lpBuff,"AAAAAAAAAAA" ; return; } int main() { func(); return 0; } ±àÒëºóÖ´ÐÐһϻØÔõôÑù£¿¹þ£¬¡°"0x00414141"Ö¸ÁîÒýÓõÄ"0x00000000"ÄÚ´æ¡£¸ÃÄÚ´æ²»ÄÜΪ"read"¡£¡±£¬¡°·Ç·¨²Ù×÷¡±à¶£¡"41"¾ÍÊÇ"A"µÄ16½øÖƵÄASCIIÂëÁË£¬ÄÇÃ÷ÏÔ¾ÍÊÇstrcatÕâ¾ä³öµÄÎÊÌâÁË¡£"lpBuff"µÄ´óСֻÓÐ8×Ö½Ú£¬Ëã½ø½áβµÄ\0£¬ÄÇstrcat×î¶àÖ»ÄÜдÈë7¸ö"A"£¬µ«³ÌÐòʵ¼ÊдÈëÁË11¸ö"A"Íâ¼Ó1¸ö\0¡£ÔÙÀ´¿´¿´ÉÏÃæÄÇ·ùͼ£¬¶à³öÀ´µÄ4¸ö×Ö½ÚÕýºÃ¸²¸ÇÁËRETµÄËùÔÚµÄÄÚ´æ¿Õ¼ä£¬µ¼Öº¯Êý·µ»Øµ½Ò»¸ö´íÎóµÄÄÚ´æµØÖ·£¬Ö´ÐÐÁË´íÎóµÄÖ¸Áî¡£Èç¹ûÄܾ«ÐĹ¹ÔìÕâ¸ö×Ö·û´®£¬Ê¹Ëü·Ö³ÉÈý²¿·Ö£¬Ç°Ò»²¿·Ý½ö½öÊÇÌî³äµÄÎÞÒâÒåÊý¾ÝÒÔ´ïµ½Òç³öµÄÄ¿µÄ£¬½Ó×ÅÊÇÒ»¸ö¸²¸ÇRETµÄÊý¾Ý£¬½ô½Ó×ÅÊÇÒ»¶Îshellcode£¬ÄÇֻҪןöRETµØÖ·ÄÜÖ¸ÏòÕâ¶ÎshellcodeµÄµÚÒ»¸öÖ¸ÁÄǺ¯Êý·µ»ØÊ±¾ÍÄÜÖ´ÐÐshellcodeÁË¡£µ«ÊÇÈí¼þµÄ²»Í¬°æ±¾ºÍ²»Í¬µÄÔËÐл·¾³¶¼¿ÉÄÜÓ°ÏìÕâ¶ÎshellcodeÔÚÄÚ´æÖеÄλÖã¬ÄÇôҪ¹¹ÔìÕâ¸öRETÊÇÊ®·ÖÀ§Äѵġ£Ò»°ã¶¼ÔÚRETºÍshellcodeÖ®¼äÌî³ä´óÁ¿µÄNOPÖ¸ÁʹµÃexploitÓиüÇ¿µÄͨÓÃÐÔ¡£ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ªµÍ¶ËÄÚ´æÇøÓò ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ªÓÉexploitÌîÈëÊý¾ÝµÄ¿ªÊ¼ ©¦ ©¦ ©¦ buffer ©¦<¡ªÌîÈëÎÞÓõÄÊý¾Ý ©¦ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ RET ©¦<¡ªÖ¸Ïòshellcode£¬»òNOPÖ¸ÁîµÄ·¶Î§ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ NOP ©¦ ©¦ ¡¡ ©¦<¡ªÌîÈëµÄNOPÖ¸ÁÊÇRET¿ÉÖ¸ÏòµÄ·¶Î§ ©¦ NOP ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È ©¦ ©¦ ©¦ shellcode ©¦ ©¦ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ªÓÉexploitÌîÈëÊý¾ÝµÄ½áÊø ©¦ ¡¡ ©¦ ©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È<¡ª¸ß¶ËÄÚ´æÇøÓò windowsÏµĶ¯Ì¬Êý¾Ý³ýÁ˿ɴæ·ÅÔÚÕ»ÖУ¬»¹¿ÉÒÔ´æ·ÅÔÚ¶ÑÖС£Á˽âC++µÄÅóÓѶ¼ÖªµÀ£¬C++¿ÉÒÔʹÓÃnew¹Ø¼ü×ÖÀ´¶¯Ì¬·ÖÅäÄÚ´æ¡£À´¿´ÏÂÃæµÄC++´úÂ룺 #include #include #include void func() { char *buffer=new char[128]; char bufflocal[128]; static char buffstatic[128]; printf("0x%08x\n",buffer); //´òÓ¡¶ÑÖбäÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",bufflocal); //´òÓ¡±¾µØ±äÁ¿µÄÄÚ´æµØÖ· printf("0x%08x\n",buffstatic); //´òÓ¡¾²Ì¬±äÁ¿µÄÄÚ´æµØÖ· } void main() { func(); return; } ³ÌÐòÖ´Ðнá¹ûΪ£º 0x004107d0 0x0012ff04 0x004068c0 ¿ÉÒÔ·¢ÏÖÓÃnew¹Ø¼ü×Ö·ÖÅäµÄÄÚ´æ¼´²»ÔÚÕ»ÖУ¬Ò²²»ÔÚ¾²Ì¬Êý¾ÝÇø¡£VC±àÒëÆ÷ÊÇͨ¹ýwindowsϵġ°¶Ñ(heap)¡±À´ÊµÏÖnew¹Ø¼ü×ÖµÄÄڴ涯̬·ÖÅä¡£ÔÚ½²¡°¶Ñ¡±Ö®Ç°£¬ÏÈÀ´Á˽âһϺ͡°¶Ñ¡±ÓйصöAPIº¯Êý£º HeapAlloc ÔÚ¶ÑÖÐÉêÇëÄÚ´æ¿Õ¼ä HeapCreate ´´½¨Ò»¸öеĶѶÔÏó HeapDestroy Ïú»ÙÒ»¸ö¶Ñ¶ÔÏó HeapFree ÊÍ·ÅÉêÇëµÄÄÚ´æ HeapWalk ö¾Ù¶Ñ¶ÔÏóµÄËùÓÐÄÚ´æ¿é GetProcessHeap È¡µÃ½ø³ÌµÄĬÈ϶ѶÔÏó GetProcessHeaps È¡µÃ½ø³ÌËùÓеĶѶÔÏó LocalAlloc GlobalAlloc µ±½ø³Ì³õʼ»¯Ê±£¬ÏµÍ³»á×Ô¶¯Îª½ø³Ì´´½¨Ò»¸öĬÈ϶ѣ¬Õâ¸ö¶ÑĬÈÏËùÕ¼ÄÚ´æµÄ´óСΪ1M¡£¶Ñ¶ÔÏóÓÉϵͳ½øÐйÜÀí£¬ËüÔÚÄÚ´æÖÐÒÔÁ´Ê½½á¹¹´æÔÚ¡£Í¨¹ýÏÂÃæµÄ´úÂë¿ÉÒÔͨ¹ý¶Ñ¶¯Ì¬ÉêÇëÄÚ´æ¿Õ¼ä£º HANDLE hHeap=GetProcessHeap(); char *buff=HeapAlloc(hHeap,0,8); ÆäÖÐhHeapÊǶѶÔÏóµÄ¾ä±ú£¬buffÊÇÖ¸ÏòÉêÇëµÄÄÚ´æ¿Õ¼äµÄµØÖ·¡£ÄÇÕâ¸öhHeap¾¿¾¹ÊÇÊ²Ã´ÄØ£¿ËüµÄÖµÓÐʲôÒâÒåÂ𣿿´¿´ÏÂÃæÕâ¶Î´úÂë°É£º #pragma comment(linker,"/entry:main" //¶¨Òå³ÌÐòµÄÈë¿Ú #include _CRTIMP int (__cdecl *printf)(const char *, ...); //¶¨ÒåSTLº¯Êýprintf /*--------------------------------------------------------------------------- дµ½ÕâÀÎÒÃÇ˳±ãÀ´¸´Ï°Ò»ÏÂÇ°ÃæËù½²µÄ֪ʶ£º (*×¢)printfº¯ÊýÊÇCÓïÑԵıê×¼º¯Êý¿âÖк¯Êý£¬VCµÄ±ê×¼º¯Êý¿âÓÉmsvcrt.dllÄ£¿éʵÏÖ¡£ Óɺ¯Êý¶¨Òå¿É¼û£¬printfµÄ²ÎÊý¸öÊýÊǿɱäµÄ£¬º¯ÊýÄÚ²¿ÎÞ·¨Ô¤ÏÈÖªµÀµ÷ÓÃÕßѹÈëµÄ²ÎÊý¸öÊý£¬º¯ÊýÖ»ÄÜͨ¹ý·ÖÎöµÚÒ»¸ö²ÎÊý×Ö·û´®µÄ¸ñʽÀ´»ñµÃѹÈë²ÎÊýµÄÐÅÏ¢£¬ÓÉÓÚÕâÀï²ÎÊýµÄ¸öÊýÊǶ¯Ì¬µÄ£¬ËùÒÔ±ØÐëÓɵ÷ÓÃÕßÀ´Æ½ºâ¶ÑÕ»£¬ÕâÀï±ãʹÓÃÁË__cdeclµ÷ÓùæÔò¡£BTW£¬WindowsϵͳµÄAPIº¯Êý»ù±¾ÉÏÊÇ__stdcallµ÷ÓÃÐÎʽ£¬Ö»ÓÐÒ»¸öAPIÀýÍ⣬ÄǾÍÊÇwsprintf£¬ËüʹÓÃ__cdeclµ÷ÓùæÔò£¬Í¬printfº¯ÊýÒ»Ñù£¬ÕâÊÇÓÉÓÚËüµÄ²ÎÊý¸öÊýÊǿɱäµÄÔµ¹Ê¡£ ---------------------------------------------------------------------------*/ void main() { HANDLE hHeap=GetProcessHeap(); char *buff=HeapAlloc(hHeap,0,0x10); char *buff2=HeapAlloc(hHeap,0,0x10); HMODULE hMsvcrt=LoadLibrary("msvcrt.dll" ; printf=(void *)GetProcAddress(hMsvcrt,"printf" ; printf("0x%08x\n",hHeap); printf("0x%08x\n",buff); printf("0x%08x\n\n",buff2); } Ö´Ðнá¹ûΪ£º 0x00130000 0x00133100 0x00133118 hHeapµÄÖµÔõôºÍÄǸöbuffµÄÖµÄÇô½Ó½üÄØ£¿ÆäʵhHeapÕâ¸ö¾ä±ú¾ÍÊÇÖ¸ÏòHEAPÊײ¿µÄµØÖ·¡£ÔÚ½ø³ÌµÄÓû§Çø´æ×ÅÒ»¸ö½ÐPEB(½ø³Ì»·¾³¿é)µÄ½á¹¹£¬Õâ¸ö½á¹¹Öдæ·Å×ÅһЩÓйؽø³ÌµÄÖØÒªÐÅÏ¢£¬ÆäÖÐÔÚPEBÊ×µØÖ·Æ«ÒÆ0x18´¦´æ·ÅµÄProcessHeap¾ÍÊǽø³ÌĬÈ϶ѵĵØÖ·£¬¶øÆ«ÒÆ0x90´¦´æ·ÅÁËÖ¸Ïò½ø³ÌËùÓжѵĵØÖ·ÁбíµÄÖ¸Õë¡£windowsÓкܶàAPI¶¼Ê¹Óýø³ÌµÄĬÈ϶ÑÀ´´æ·Å¶¯Ì¬Êý¾Ý£¬Èçwindows 2000ϵÄËùÓÐANSI°æ±¾µÄº¯Êý¶¼ÊÇÔÚĬÈ϶ÑÖÐÉêÇëÄÚ´æÀ´×ª»»ANSI×Ö·û´®µ½Unicode×Ö·û´®µÄ¡£¶ÔÒ»¸ö¶ÑµÄ·ÃÎÊÊÇ˳Ðò½øÐеģ¬Í¬Ò»Ê±¿ÌÖ»ÄÜÓÐÒ»¸öÏ̷߳ÃÎʶÑÖеÄÊý¾Ý£¬µ±¶à¸öÏß³ÌͬʱÓзÃÎÊÒªÇóʱ£¬Ö»ÄÜÅŶӵȴý£¬ÕâÑù±ãÔì³É³ÌÐòÖ´ÐÐЧÂÊϽµ¡£ [ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-11 at 07:32 ] |
» ²ÂÄãϲ»¶
0854AI CV·½ÏòÕÐÊÕµ÷¼Á
ÒѾÓÐ3È˻ظ´
Çóµ÷¼Á323²ÄÁÏÓ뻯¹¤
ÒѾÓÐ3È˻ظ´
ÉúÎïѧѧ˶Çóµ÷¼Á
ÒѾÓÐ9È˻ظ´
289Çóµ÷¼Á
ÒѾÓÐ8È˻ظ´
07»¯Ñ§280·ÖÇóµ÷¼Á
ÒѾÓÐ5È˻ظ´
300·Ö£¬²ÄÁÏ£¬Çóµ÷¼Á£¬Ó¢Ò»Êý¶þ
ÒѾÓÐ4È˻ظ´
¡¾¿¼Ñе÷¼Á¡¿»¯Ñ§×¨Òµ 281·Ö£¬Ò»Ö¾Ô¸ËÄ´¨´óѧ£¬³ÏÐÄÇóµ÷¼Á
ÒѾÓÐ16È˻ظ´
0854µç×ÓÐÅÏ¢Çóµ÷¼Á
ÒѾÓÐ7È˻ظ´
0854È˹¤ÖÇÄÜ·½ÏòÕÐÊÕµ÷¼Á
ÒѾÓÐ3È˻ظ´
µ÷¼Á
ÒѾÓÐ4È˻ظ´
sdlj8051
½ð³æ (ÖøÃûдÊÖ)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 0.1
- ½ð±Ò: 1149.8
- ºì»¨: 3
- Ìû×Ó: 2254
- ÔÚÏß: 18.1Сʱ
- ³æºÅ: 71297
- ×¢²á: 2005-05-30
- רҵ: µç·Óëϵͳ
|
×îºóÀ´ËµËµÄÚ´æÖеÄÊý¾Ý¶ÔÆë¡£ËùλÊý¾Ý¶ÔÆë£¬ÊÇÖ¸Êý¾ÝËùÔÚµÄÄÚ´æµØÖ·±ØÐëÊǸÃÊý¾Ý³¤¶ÈµÄÕûÊý±¶£¬DWORDÊý¾ÝµÄÄÚ´æÆðʼµØÖ·Äܱ»4³ý¾¡£¬WORDÊý¾ÝµÄÄÚ´æÆðʼµØÖ·Äܱ»2³ý¾¡£¬x86 CPUÄÜÖ±½Ó·ÃÎÊ¶ÔÆëµÄÊý¾Ý£¬µ±ËûÊÔͼ·ÃÎÊÒ»¸öδ¶ÔÆëµÄÊý¾Ýʱ£¬»áÔÚÄÚ²¿½øÐÐһϵÁеĵ÷Õû£¬ÕâЩµ÷Õû¶ÔÓÚ³ÌÐòÀ´ËµÊÇ͸Ã÷µÄ£¬µ«ÊǻήµÍÔËÐÐËÙ¶È£¬ËùÒÔ±àÒëÆ÷ÔÚ±àÒë³ÌÐòʱ»á¾¡Á¿±£Ö¤Êý¾Ý¶ÔÆë¡£Í¬ÑùÒ»¶Î´úÂ룬ÎÒÃÇÀ´¿´¿´ÓÃVC¡¢Dev-C++ºÍlccÈý¸ö²»Í¬±àÒëÆ÷±àÒë³öÀ´µÄ³ÌÐòµÄÖ´Ðнá¹û£º #include int main() { int a; char b; int c; printf("0x%08x\n",&a); printf("0x%08x\n",&b); printf("0x%08x\n",&c); return 0; } ÕâÊÇÓÃVC±àÒëºóµÄÖ´Ðнá¹û£º 0x0012ff7c 0x0012ff7b 0x0012ff80 ±äÁ¿ÔÚÄÚ´æÖеÄ˳Ðò£ºb(1×Ö½Ú)-a(4×Ö½Ú)-c(4×Ö½Ú)¡£ ÕâÊÇÓÃDev-C++±àÒëºóµÄÖ´Ðнá¹û£º 0x0022ff7c 0x0022ff7b 0x0022ff74 ±äÁ¿ÔÚÄÚ´æÖеÄ˳Ðò£ºc(4×Ö½Ú)-ÖмäÏà¸ô3×Ö½Ú-b(Õ¼1×Ö½Ú)-a(4×Ö½Ú)¡£ ÕâÊÇÓÃlcc±àÒëºóµÄÖ´Ðнá¹û£º 0x0012ff6c 0x0012ff6b 0x0012ff64 ±äÁ¿ÔÚÄÚ´æÖеÄ˳Ðò£ºÍ¬ÉÏ¡£ Èý¸ö±àÒëÆ÷¶¼×öµ½ÁËÊý¾Ý¶ÔÆë£¬µ«ÊǺóÁ½¸ö±àÒëÆ÷ÏÔȻûVC¡°´ÏÃ÷¡±£¬ÈÃÒ»¸öcharÕ¼ÁË4×Ö½Ú£¬ÀË·ÑÄÚ´æÅ¶¡£ »ù´¡ÖªÊ¶£º ¶ÑÕ»ÊÇÒ»ÖÖ¼òµ¥µÄÊý¾Ý½á¹¹£¬ÊÇÒ»ÖÖÖ»ÔÊÐíÔÚÆäÒ»¶Ë½øÐвåÈë»òɾ³ýµÄÏßÐÔ±í¡£ÔÊÐí²åÈë»òɾ³ý²Ù×÷µÄÒ»¶Ë³ÆÎªÕ»¶¥£¬ÁíÒ»¶Ë³ÆÎªÕ»µ×£¬¶Ô¶ÑÕ»µÄ²åÈëºÍɾ³ý²Ù×÷±»³ÆÎªÈëÕ»ºÍ³öÕ»¡£ÓÐÒ»×éCPUÖ¸Áî¿ÉÒÔʵÏÖ¶Ô½ø³ÌµÄÄÚ´æÊµÏÖ¶ÑÕ»·ÃÎÊ¡£ÆäÖУ¬POPÖ¸ÁîʵÏÖ³öÕ»²Ù×÷£¬PUSHÖ¸ÁîʵÏÖÈëÕ»²Ù×÷¡£CPUµÄESP¼Ä´æÆ÷´æ·Åµ±Ç°Ï̵߳ÄÕ»¶¥Ö¸Õ룬EBP¼Ä´æÆ÷Öб£´æµ±Ç°Ï̵߳ÄÕ»µ×Ö¸Õë¡£CPUµÄEIP¼Ä´æÆ÷´æ·ÅÏÂÒ»¸öCPUÖ¸Áî´æ·ÅµÄÄÚ´æµØÖ·£¬µ±CPUÖ´ÐÐÍ굱ǰµÄÖ¸Áîºó£¬´ÓEIP¼Ä´æÆ÷ÖжÁÈ¡ÏÂÒ»ÌõÖ¸ÁîµÄÄÚ´æµØÖ·£¬È»ºó¼ÌÐøÖ´ÐС£ ²Î¿¼£º¡¶WindowsϵÄHEAPÒç³ö¼°ÆäÀûÓá·by: isno ¡¶windowsºËÐıà³Ì¡·by: Jeffrey Richter ÕªÒª£º ÌÖÂÛ³£¼ûµÄ¶ÑÐÔÄÜÎÊÌâÒÔ¼°ÈçºÎ·À·¶ËüÃÇ¡££¨¹² 9 Ò³£© ǰÑÔ ÄúÊÇ·ñÊǶ¯Ì¬·ÖÅäµÄ C/C++ ¶ÔÏóÖÒʵÇÒÐÒÔ˵ÄÓû§£¿ÄúÊÇ·ñÔÚÄ£¿é¼äµÄÍù·µÍ¨ÐÅÖÐÆµ·±µØÊ¹ÓÃÁË¡°×Ô¶¯»¯¡±£¿ÄúµÄ³ÌÐòÊÇ·ñÒò¶Ñ·ÖÅä¶øÔËÐÐÆðÀ´ºÜÂý£¿²»½ö½öÄúÓöµ½ÕâÑùµÄÎÊÌâ¡£¼¸ºõËùÓÐÏîÄ¿³ÙÔç¶¼»áÓöµ½¶ÑÎÊÌâ¡£´ó¼Ò¶¼Ïë˵£¬¡°ÎҵĴúÂëÕæÕýºÃ£¬Ö»ÊǶÑÌ«Âý¡±¡£ÄÇÖ»ÊDz¿·ÖÕýÈ·¡£¸üÉîÈëÀí½â¶Ñ¼°ÆäÓ÷¨¡¢ÒÔ¼°»á·¢ÉúʲôÎÊÌ⣬ÊǺÜÓÐÓõġ£ ʲôÊǶѣ¿ £¨Èç¹ûÄúÒѾ֪µÀʲôÊǶѣ¬¿ÉÒÔÌøµ½¡°Ê²Ã´Êdz£¼ûµÄ¶ÑÐÔÄÜÎÊÌ⣿¡±²¿·Ö£© ÔÚ³ÌÐòÖУ¬Ê¹ÓöÑÀ´¶¯Ì¬·ÖÅäºÍÊͷŶÔÏó¡£ÔÚÏÂÁÐÇé¿öÏ£¬µ÷ÓöѲÙ×÷£º ÊÂÏȲ»ÖªµÀ³ÌÐòËùÐè¶ÔÏóµÄÊýÁ¿ºÍ´óС¡£ ¶ÔÏóÌ«´ó¶ø²»Êʺ϶ÑÕ»·ÖÅä³ÌÐò¡£ ¶ÑʹÓÃÁËÔÚÔËÐÐʱ·ÖÅ䏸´úÂëºÍ¶ÑÕ»µÄÄÚ´æÖ®ÍâµÄ²¿·ÖÄÚ´æ¡£ÏÂͼ¸ø³öÁ˶ѷÖÅä³ÌÐòµÄ²»Í¬²ã¡£ ´ËÖ÷ÌâÏà¹ØÍ¼Æ¬ÈçÏ£º GlobalAlloc/GlobalFree£ºMicrosoft Win32 ¶Ñµ÷Óã¬ÕâЩµ÷ÓÃÖ±½ÓÓëÿ¸ö½ø³ÌµÄĬÈ϶ѽøÐжԻ°¡£ LocalAlloc/LocalFree£ºWin32 ¶Ñµ÷Óã¨ÎªÁËÓë Microsoft Windows NT ¼æÈÝ£©£¬ÕâЩµ÷ÓÃÖ±½ÓÓëÿ¸ö½ø³ÌµÄĬÈ϶ѽøÐжԻ°¡£ COM µÄ IMalloc ·ÖÅä³ÌÐò£¨»ò CoTaskMemAlloc / CoTaskMemFree£©£ºº¯ÊýʹÓÃÿ¸ö½ø³ÌµÄĬÈ϶ѡ£×Ô¶¯»¯³ÌÐòʹÓá°×é¼þ¶ÔÏóÄ£ÐÍ (COM)¡±µÄ·ÖÅä³ÌÐò£¬¶øÉêÇëµÄ³ÌÐòʹÓÃÿ¸ö½ø³Ì¶Ñ¡£ C/C++ ÔËÐÐʱ (CRT) ·ÖÅä³ÌÐò£ºÌṩÁË malloc() ºÍ free() ÒÔ¼° new ºÍ delete ²Ù×÷·û¡£Èç Microsoft Visual Basic ºÍ Java µÈÓïÑÔÒ²ÌṩÁËеIJÙ×÷·û²¢Ê¹ÓÃÀ¬»øÊÕ¼¯À´´úÌæ¶Ñ¡£CRT ´´½¨×Ô¼ºµÄ˽Óжѣ¬×¤ÁôÔÚ Win32 ¶ÑµÄ¶¥²¿¡£ Windows NT ÖУ¬Win32 ¶ÑÊÇ Windows NT ÔËÐÐʱ·ÖÅä³ÌÐòÖÜΧµÄ±¡²ã¡£ËùÓÐ API ת·¢ËüÃǵÄÇëÇó¸ø NTDLL¡£ Windows NT ÔËÐÐʱ·ÖÅä³ÌÐòÌṩ Windows NT ÄڵĺËÐĶѷÖÅä³ÌÐò¡£ËüÓɾßÓÐ 128 ¸ö´óС´Ó 8 µ½ 1,024 ×ֽڵĿÕÏÐÁбíµÄǰ¶Ë·ÖÅä³ÌÐò×é³É¡£ºó¶Ë·ÖÅä³ÌÐòʹÓÃÐéÄâÄÚ´æÀ´±£ÁôºÍÌá½»Ò³¡£ ÔÚͼ±íµÄµ×²¿ÊÇ¡°ÐéÄâÄÚ´æ·ÖÅä³ÌÐò¡±£¬²Ù×÷ϵͳʹÓÃËüÀ´±£ÁôºÍÌá½»Ò³¡£ËùÓзÖÅä³ÌÐòʹÓÃÐéÄâÄÚ´æ½øÐÐÊý¾ÝµÄ´æÈ¡¡£ ·ÖÅäºÍÊͷſ鲻¾ÍÄÇô¼òµ¥Âð£¿ÎªºÎ»¨·ÑÕâô³¤Ê±¼ä£¿ ¶ÑʵÏÖµÄ×¢ÒâÊÂÏî ´«Í³ÉÏ£¬²Ù×÷ϵͳºÍÔËÐÐʱ¿âÊÇÓë¶ÑµÄʵÏÖ¹²´æµÄ¡£ÔÚÒ»¸ö½ø³ÌµÄ¿ªÊ¼£¬²Ù×÷ϵͳ´´½¨Ò»¸öĬÈ϶ѣ¬½Ð×ö¡°½ø³Ì¶Ñ¡±¡£Èç¹ûûÓÐÆäËû¶Ñ¿ÉʹÓã¬Ôò¿éµÄ·ÖÅäʹÓá°½ø³Ì¶Ñ¡±¡£ÓïÑÔÔËÐÐʱҲÄÜÔÚ½ø³ÌÄÚ´´½¨µ¥¶ÀµÄ¶Ñ¡££¨ÀýÈ磬C ÔËÐÐʱ´´½¨Ëü×Ô¼ºµÄ¶Ñ¡££©³ýÕâЩרÓõĶÑÍ⣬ӦÓóÌÐò»òÐí¶àÒÑÔØÈëµÄ¶¯Ì¬Á´½Ó¿â (DLL) Ö®Ò»¿ÉÒÔ´´½¨ºÍʹÓõ¥¶ÀµÄ¶Ñ¡£Win32 ÌṩһÕûÌ× API À´´´½¨ºÍʹÓÃ˽Óжѡ£ÓйضѺ¯Êý£¨Ó¢ÎÄ£©µÄÏ꾡ָµ¼£¬Çë²Î¼û MSDN¡£ µ±Ó¦ÓóÌÐò»ò DLL ´´½¨Ë½ÓжÑʱ£¬ÕâЩ¶Ñ´æÔÚÓÚ½ø³Ì¿Õ¼ä£¬²¢ÇÒÔÚ½ø³ÌÄÚÊǿɷÃÎʵġ£´Ó¸ø¶¨¶Ñ·ÖÅäµÄÊý¾Ý½«ÔÚͬһ¸ö¶ÑÉÏÊÍ·Å¡££¨²»ÄÜ´ÓÒ»¸ö¶Ñ·ÖÅä¶øÔÚÁíÒ»¸ö¶ÑÊÍ·Å¡££© ÔÚËùÓÐÐéÄâÄÚ´æÏµÍ³ÖУ¬¶ÑפÁôÔÚ²Ù×÷ϵͳµÄ¡°ÐéÄâÄÚ´æ¹ÜÀíÆ÷¡±µÄ¶¥²¿¡£ÓïÑÔÔËÐÐʱ¶ÑҲפÁôÔÚÐéÄâÄÚ´æ¶¥²¿¡£Ä³Ð©Çé¿öÏ£¬ÕâЩ¶ÑÊDzÙ×÷ϵͳ¶ÑÖеIJ㣬¶øÓïÑÔÔËÐÐʱ¶ÑÔòͨ¹ý´ó¿éµÄ·ÖÅäÀ´Ö´ÐÐ×Ô¼ºµÄÄÚ´æ¹ÜÀí¡£²»Ê¹ÓòÙ×÷ϵͳ¶Ñ£¬¶øÊ¹ÓÃÐéÄâÄڴ溯Êý¸üÀûÓڶѵķÖÅäºÍ¿éµÄʹÓᣠµäÐ͵ĶÑʵÏÖÓÉǰ¡¢ºó¶Ë·ÖÅä³ÌÐò×é³É¡£Ç°¶Ë·ÖÅä³ÌÐòά³Ö¹Ì¶¨´óС¿éµÄ¿ÕÏÐÁÐ±í¡£¶ÔÓÚÒ»´Î·ÖÅäµ÷Ó㬶ѳ¢ÊÔ´Óǰ¶ËÁбíÕÒµ½Ò»¸ö×ÔÓɿ顣Èç¹ûʧ°Ü£¬¶Ñ±»ÆÈ´Óºó¶Ë£¨±£ÁôºÍÌá½»ÐéÄâÄڴ棩·ÖÅäÒ»¸ö´ó¿éÀ´Âú×ãÇëÇó¡£Í¨ÓõÄʵÏÖÓÐÿ¿é·ÖÅäµÄ¿ªÏú£¬Õ⽫ºÄ·ÑÖ´ÐÐÖÜÆÚ£¬Ò²¼õÉÙÁË¿ÉʹÓõĴ洢¿Õ¼ä¡£ Knowledge Base ÎÄÕ Q10758£¬¡°Óà calloc() ºÍ malloc() ¹ÜÀíÄڴ桱 £¨ËÑË÷ÎÄÕ±àºÅ£©, °üº¬ÁËÓйØÕâЩÖ÷ÌâµÄ¸ü¶à±³¾°ÖªÊ¶¡£ÁíÍ⣬ÓйضÑʵÏÖºÍÉè¼ÆµÄÏêϸÌÖÂÛÒ²¿ÉÔÚÏÂÁÐÖø×÷ÖÐÕÒµ½£º¡°Dynamic Storage Allocation: A Survey and Critical Review¡±£¬×÷Õß Paul R. Wilson¡¢Mark S. Johnstone¡¢Michael Neely ºÍ David Boles£»¡°International Workshop on Memory Management¡±, ×÷Õß Kinross, Scotland, UK, 1995 Äê 9 ÔÂ(http://www.cs.utexas.edu/users/oops/papers.html)£¨Ó¢ÎÄ£©¡£ Windows NT µÄʵÏÖ£¨Windows NT °æ±¾ 4.0 ºÍ¸üа汾£© ʹÓÃÁË 127 ¸ö´óС´Ó 8 µ½ 1,024 ×Ö½ÚµÄ 8 ×Ö½Ú¶ÔÆë¿é¿ÕÏÐÁбíºÍÒ»¸ö¡°´ó¿é¡±ÁÐ±í¡£¡°´ó¿é¡±ÁÐ±í£¨¿ÕÏÐÁбí[0]£© ±£´æ´óÓÚ 1,024 ×ֽڵĿ顣¿ÕÏÐÁбíÈÝÄÉÁËÓÃË«ÏòÁ´±íÁ´½ÓÔÚÒ»ÆðµÄ¶ÔÏó¡£Ä¬ÈÏÇé¿öÏ£¬¡°½ø³Ì¶Ñ¡±Ö´ÐÐÊÕ¼¯²Ù×÷¡££¨ÊÕ¼¯Êǽ«ÏàÁÚ¿ÕÏпéºÏ²¢³ÉÒ»¸ö´ó¿éµÄ²Ù×÷¡££©ÊÕ¼¯ºÄ·ÑÁ˶îÍâµÄÖÜÆÚ£¬µ«¼õÉÙÁ˶ѿéµÄÄÚ²¿Ë鯬¡£ µ¥Ò»È«¾ÖËø±£»¤¶Ñ£¬·ÀÖ¹¶àÏß³ÌʽµÄʹÓᣣ¨Çë²Î¼û¡°Server Performance and Scalability Killers¡±ÖеĵÚÒ»¸ö×¢ÒâÊÂÏî, George Reilly ËùÖø£¬ÔÚ ¡°MSDN Online Web Workshop¡±ÉÏ£¨Õ¾µã£ºhttp://msdn.microsoft.com/workshop/server/iis/tencom.asp£¨Ó¢ÎÄ£©¡££©µ¥Ò»È«¾ÖËø±¾ÖÊÉÏÊÇÓÃÀ´±£»¤¶ÑÊý¾Ý½á¹¹£¬·ÀÖ¹¿ç¶àÏ̵߳ÄËæ»ú´æÈ¡¡£Èô¶Ñ²Ù×÷̫Ƶ·±£¬µ¥Ò»È«¾ÖËø»á¶ÔÐÔÄÜÓв»ÀûµÄÓ°Ïì¡£ ʲôÊdz£¼ûµÄ¶ÑÐÔÄÜÎÊÌ⣿ ÒÔÏÂÊÇÄúʹÓöÑʱ»áÓöµ½µÄ×î³£¼ûÎÊÌ⣺ ·ÖÅä²Ù×÷Ôì³ÉµÄËٶȼõÂý¡£¹â·ÖÅä¾ÍºÄ·ÑºÜ³¤Ê±¼ä¡£×î¿ÉÄܵ¼ÖÂÔËÐÐËٶȼõÂýÔÒòÊÇ¿ÕÏÐÁбíûÓп飬ËùÒÔÔËÐÐʱ·ÖÅä³ÌÐò´úÂë»áºÄ·ÑÖÜÆÚѰÕҽϴóµÄ¿ÕÏп飬»ò´Óºó¶Ë·ÖÅä³ÌÐò·ÖÅäп顣 ÊͷŲÙ×÷Ôì³ÉµÄËٶȼõÂý¡£ÊͷŲÙ×÷ºÄ·Ñ½Ï¶àÖÜÆÚ£¬Ö÷ÒªÊÇÆôÓÃÁËÊÕ¼¯²Ù×÷¡£ÊÕ¼¯ÆÚ¼ä£¬Ã¿¸öÊͷŲÙ×÷¡°²éÕÒ¡±ËüµÄÏàÁڿ飬ȡ³öËüÃDz¢¹¹Ôì³É½Ï´ó¿é£¬È»ºóÔٰѴ˽ϴó¿é²åÈë¿ÕÏÐÁÐ±í¡£ÔÚ²éÕÒÆÚ¼ä£¬ÄÚ´æ¿ÉÄÜ»áËæ»úÅöµ½£¬´Ó¶øµ¼Ö¸ßËÙ»º´æ²»ÄÜÃüÖУ¬ÐÔÄܽµµÍ¡£ ¶Ñ¾ºÕùÔì³ÉµÄËٶȼõÂý¡£µ±Á½¸ö»ò¶à¸öÏß³Ìͬʱ·ÃÎÊÊý¾Ý£¬¶øÇÒÒ»¸öÏ̼߳ÌÐø½øÐÐ֮ǰ±ØÐëµÈ´ýÁíÒ»¸öÏß³ÌÍê³Éʱ¾Í·¢Éú¾ºÕù¡£¾ºÕù×ÜÊǵ¼ÖÂÂé·³£»ÕâÒ²ÊÇĿǰ¶à´¦ÀíÆ÷ϵͳÓöµ½µÄ×î´óÎÊÌâ¡£µ±´óÁ¿Ê¹ÓÃÄÚ´æ¿éµÄÓ¦ÓóÌÐò»ò DLL ÒÔ¶àÏ̷߳½Ê½ÔËÐУ¨»òÔËÐÐÓÚ¶à´¦ÀíÆ÷ϵͳÉÏ£©Ê±½«µ¼ÖÂËٶȼõÂý¡£µ¥Ò»Ëø¶¨µÄʹÓ᪳£ÓõĽâ¾ö·½°¸¡ªÒâζ×ÅʹÓöѵÄËùÓвÙ×÷ÊÇÐòÁл¯µÄ¡£µ±µÈ´ýËø¶¨Ê±ÐòÁл¯»áÒýÆðÏß³ÌÇл»ÉÏÏÂÎÄ¡£¿ÉÒÔÏëÏó½»²æÂ·¿ÚÉÁ˸µÄºìµÆ´¦×ß×ßͣͣµ¼ÖµÄËٶȼõÂý¡£ ¾ºÕùͨ³£»áµ¼ÖÂÏ̺߳ͽø³ÌµÄÉÏÏÂÎÄÇл»¡£ÉÏÏÂÎÄÇл»µÄ¿ªÏúÊǺܴóµÄ£¬µ«¿ªÏú¸ü´óµÄÊÇÊý¾Ý´Ó´¦ÀíÆ÷¸ßËÙ»º´æÖжªÊ§£¬ÒÔ¼°ºóÀ´Ï̸߳´»îʱµÄÊý¾ÝÖØ½¨¡£ ¶ÑÆÆ»µÔì³ÉµÄËٶȼõÂý¡£Ôì³É¶ÑÆÆ»µµÄÔÒòÊÇÓ¦ÓóÌÐò¶Ô¶Ñ¿éµÄ²»ÕýȷʹÓá£Í¨³£ÇéÐΰüÀ¨ÊÍ·ÅÒÑÊͷŵĶѿé»òʹÓÃÒÑÊͷŵĶѿ飬ÒÔ¼°¿éµÄÔ½½çÖØÐ´µÈÃ÷ÏÔÎÊÌâ¡££¨ÆÆ»µ²»ÔÚ±¾ÎÄÌÖÂÛ·¶Î§Ö®ÄÚ¡£ÓйØÄÚ´æÖØÐ´ºÍй©µÈÆäËûϸ½Ú£¬Çë²Î¼û Microsoft Visual C++(R) µ÷ÊÔÎĵµ ¡££© Ƶ·±µÄ·ÖÅäºÍÖØ·ÖÅäÔì³ÉµÄËٶȼõÂý¡£ÕâÊÇʹÓýű¾ÓïÑÔʱ·Ç³£ÆÕ±éµÄÏÖÏó¡£Èç×Ö·û´®±»·´¸´·ÖÅä£¬ËæÖØ·ÖÅäÔö³¤ºÍÊÍ·Å¡£²»ÒªÕâÑù×ö£¬Èç¹û¿ÉÄÜ£¬¾¡Á¿·ÖÅä´ó×Ö·û´®ºÍʹÓûº³åÇø¡£ÁíÒ»ÖÖ·½·¨¾ÍÊǾ¡Á¿ÉÙÓÃÁ¬½Ó²Ù×÷¡£ ¾ºÕùÊÇÔÚ·ÖÅäºÍÊͷŲÙ×÷Öе¼ÖÂËٶȼõÂýµÄÎÊÌâ¡£ÀíÏëÇé¿öÏ£¬Ï£ÍûʹÓÃûÓоºÕùºÍ¿ìËÙ·ÖÅä/ÊͷŵĶѡ£¿Éϧ£¬ÏÖÔÚ»¹Ã»ÓÐÕâÑùµÄͨÓöѣ¬Ò²Ðí½«À´»áÓС£ ÔÚËùÓеķþÎñÆ÷ϵͳÖУ¨Èç IIS¡¢MSProxy¡¢DatabaseStacks¡¢ÍøÂç·þÎñÆ÷¡¢ Exchange ºÍÆäËû£©, ¶ÑËø¶¨ÊµÔÚÊǸö´óÆ¿¾±¡£´¦ÀíÆ÷ÊýÔ½¶à£¬¾ºÕù¾ÍÔ½»á¶ñ»¯¡£ ¾¡Á¿¼õÉٶѵÄʹÓà ÏÖÔÚÄúÃ÷°×ʹÓöÑʱ´æÔÚµÄÎÊÌâÁË£¬ÄѵÀÄú²»ÏëÓµÓÐÄܽâ¾öÕâЩÎÊÌâµÄ³¬¼¶Ä§°ôÂð£¿ÎÒ¿ÉÏ£ÍûÓС£µ«Ã»ÓÐħ·¨ÄÜʹ¶ÑÔËÐмӿ졪Òò´Ë²»ÒªÆÚÍûÔÚ²úÆ·³ö»õ֮ǰµÄ×îºóÒ»ÐÇÆÚÄܹ»´óΪ¸Ä¹Û¡£Èç¹ûÌáǰ¹æ»®¶Ñ²ßÂÔ£¬Çé¿ö½«»á´ó´óºÃת¡£µ÷ÕûʹÓöѵķ½·¨£¬¼õÉٶԶѵIJÙ×÷ÊÇÌá¸ßÐÔÄܵÄÁ¼·½¡£ ÈçºÎ¼õÉÙʹÓöѲÙ×÷£¿Í¨¹ýÀûÓÃÊý¾Ý½á¹¹ÄÚµÄλÖÿɼõÉٶѲÙ×÷µÄ´ÎÊý¡£Ç뿼ÂÇÏÂÁÐʵÀý£º struct ObjectA { // objectA µÄÊý¾Ý } struct ObjectB { // objectB µÄÊý¾Ý } // ͬʱʹÓà objectA ºÍ objectB // // ʹÓÃÖ¸Õë // struct ObjectB { struct ObjectA * pObjA; // objectB µÄÊý¾Ý } // // ʹÓÃǶÈë // struct ObjectB { struct ObjectA pObjA; // objectB µÄÊý¾Ý } // // ¼¯ºÏ ¨C ÔÚÁíÒ»¶ÔÏóÄÚʹÓà objectA ºÍ objectB // struct ObjectX { struct ObjectA objA; struct ObjectB objB; } ±ÜÃâʹÓÃÖ¸Õë¹ØÁªÁ½¸öÊý¾Ý½á¹¹¡£Èç¹ûʹÓÃÖ¸Õë¹ØÁªÁ½¸öÊý¾Ý½á¹¹£¬Ç°ÃæÊµÀýÖеĶÔÏó A ºÍ B ½«±»·Ö±ð·ÖÅäºÍÊÍ·Å¡£Õâ»áÔö¼Ó¶îÍ⿪Ïú¡ªÎÒÃÇÒª±ÜÃâÕâÖÖ×ö·¨¡£ °Ñ´øÖ¸ÕëµÄ×Ó¶ÔÏóǶÈ븸¶ÔÏó¡£µ±¶ÔÏóÖÐÓÐÖ¸Õëʱ£¬ÔòÒâζ×ŶÔÏóÖÐÓж¯Ì¬ÔªËØ£¨°Ù·ÖÖ®°ËÊ®£©ºÍûÓÐÒýÓõÄÐÂλÖá£Ç¶ÈëÔö¼ÓÁËλÖôӶø¼õÉÙÁ˽øÒ»²½·ÖÅä/ÊͷŵÄÐèÇó¡£Õ⽫Ìá¸ßÓ¦ÓóÌÐòµÄÐÔÄÜ¡£ ºÏ²¢Ð¡¶ÔÏóÐγɴó¶ÔÏ󣨾ۺϣ©¡£¾ÛºÏ¼õÉÙ·ÖÅäºÍÊͷŵĿéµÄÊýÁ¿¡£Èç¹ûÓм¸¸ö¿ª·¢Õߣ¬¸÷×Ô¿ª·¢Éè¼ÆµÄ²»Í¬²¿·Ö£¬Ôò×îÖÕ»áÓÐÐí¶àС¶ÔÏóÐèÒªºÏ²¢¡£¼¯³ÉµÄÌôÕ½¾ÍÊÇÒªÕÒµ½ÕýÈ·µÄ¾ÛºÏ±ß½ç¡£ ÄÚÁª»º³åÇøÄܹ»Âú×ã°Ù·ÖÖ®°ËÊ®µÄÐèÒª£¨aka 80-20 ¹æÔò£©¡£¸ö±ðÇé¿öÏ£¬ÐèÒªÄڴ滺³åÇøÀ´±£´æ×Ö·û´®/¶þ½øÖÆÊý¾Ý£¬µ«ÊÂÏȲ»ÖªµÀ×Ü×Ö½ÚÊý¡£¹À¼Æ²¢ÄÚÁªÒ»¸ö´óСÄÜÂú×ã°Ù·ÖÖ®°ËÊ®ÐèÒªµÄ»º³åÇø¡£¶ÔÊ£ÓàµÄ°Ù·ÖÖ®¶þÊ®£¬¿ÉÒÔ·ÖÅäÒ»¸öÐµĻº³åÇøºÍÖ¸ÏòÕâ¸ö»º³åÇøµÄÖ¸Õë¡£ÕâÑù£¬¾Í¼õÉÙ·ÖÅäºÍÊͷŵ÷Óò¢Ôö¼ÓÊý¾ÝµÄλÖÿռ䣬´Ó¸ù±¾ÉÏÌá¸ß´úÂëµÄÐÔÄÜ¡£ ÔÚ¿éÖзÖÅä¶ÔÏ󣨿黯£©¡£¿é»¯ÊÇÒÔ×éµÄ·½Ê½Ò»´Î·ÖÅä¶à¸ö¶ÔÏóµÄ·½·¨¡£Èç¹û¶ÔÁбíµÄÏîÁ¬Ðø¸ú×Ù£¬ÀýÈç¶ÔÒ»¸ö {Ãû³Æ£¬Öµ} ¶ÔµÄÁÐ±í£¬ÓÐÁ½ÖÖÑ¡Ôñ£ºÑ¡ÔñÒ»ÊÇΪÿһ¸ö¡°Ãû³Æ-Öµ¡±¶Ô·ÖÅäÒ»¸ö½Úµã£»Ñ¡Ôñ¶þÊÇ·ÖÅäÒ»¸öÄÜÈÝÄÉ£¨ÈçÎå¸ö£©¡°Ãû³Æ-Öµ¡±¶ÔµÄ½á¹¹¡£ÀýÈ磬һ°ãÇé¿öÏ£¬Èç¹û´æ´¢ËĶԣ¬¾Í¿É¼õÉÙ½ÚµãµÄÊýÁ¿£¬Èç¹ûÐèÒª¶îÍâµÄ¿Õ¼äÊýÁ¿£¬ÔòʹÓø½¼ÓµÄÁ´±íÖ¸Õë¡£ ¿é»¯ÊÇÓѺõĴ¦ÀíÆ÷¸ßËÙ»º´æ£¬ÌرðÊǶÔÓÚ L1-¸ßËÙ»º´æ£¬ÒòΪËüÌṩÁËÔö¼ÓµÄλÖà ¡ª²»ÓÃ˵¶ÔÓÚ¿é·ÖÅ䣬ºÜ¶àÊý¾Ý¿é»áÔÚͬһ¸öÐéÄâÒ³ÖС£ ÕýȷʹÓà _amblksiz¡£C ÔËÐÐʱ (CRT) ÓÐËüµÄ×Ô¶¨Òåǰ¶Ë·ÖÅä³ÌÐò£¬¸Ã·ÖÅä³ÌÐò´Óºó¶Ë£¨Win32 ¶Ñ£©·ÖÅä´óСΪ _amblksiz µÄ¿é¡£½« _amblksiz ÉèÖÃΪ½Ï¸ßµÄÖµÄÜDZÔڵؼõÉÙ¶Ôºó¶ËµÄµ÷ÓôÎÊý¡£ÕâÖ»¶Ô¹ã·ºÊ¹Óà CRT µÄ³ÌÐòÊÊÓᣠʹÓÃÉÏÊö¼¼Êõ½«»ñµÃµÄºÃ´¦»áÒò¶ÔÏóÀàÐÍ¡¢´óС¼°¹¤×÷Á¿¶øÓÐËù²»Í¬¡£µ«×ÜÄÜÔÚÐÔÄܺͿÉÉýËõÐÔ·½ÃæÓÐËùÊÕ»ñ¡£ÁíÒ»·½Ã棬´úÂë»áÓеãÌØÊ⣬µ«Èç¹û¾¹ýÉî˼ÊìÂÇ£¬´úÂ뻹ÊǺÜÈÝÒ×¹ÜÀíµÄ¡£ |
2Â¥2006-08-23 11:51:17
sdlj8051
½ð³æ (ÖøÃûдÊÖ)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 0.1
- ½ð±Ò: 1149.8
- ºì»¨: 3
- Ìû×Ó: 2254
- ÔÚÏß: 18.1Сʱ
- ³æºÅ: 71297
- ×¢²á: 2005-05-30
- רҵ: µç·Óëϵͳ
|
ÆäËûÌá¸ßÐÔÄܵļ¼Êõ ÏÂÃæÊÇһЩÌá¸ßËٶȵļ¼Êõ£º ʹÓà Windows NT5 ¶Ñ ÓÉÓÚ¼¸¸öͬʵÄŬÁ¦ºÍÐÁÇÚ¹¤×÷£¬1998 Äê³õ Microsoft Windows(R) 2000 ÖÐÓÐÁ˼¸¸öÖØ´ó¸Ä½ø£º ¸Ä½øÁ˶ѴúÂëÄÚµÄËø¶¨¡£¶Ñ´úÂë¶Ôÿ¶ÑÒ»¸öËø¡£È«¾ÖËø±£»¤¶ÑÊý¾Ý½á¹¹£¬·ÀÖ¹¶àÏß³ÌʽµÄʹÓᣵ«²»ÐÒµÄÊÇ£¬ÔÚ¸ßͨÐÅÁ¿µÄÇé¿öÏ£¬¶ÑÈÔÊÜÀ§ÓÚÈ«¾ÖËø£¬µ¼Ö¸߾ºÕùºÍµÍÐÔÄÜ¡£Windows 2000 ÖУ¬ËøÄÚ´úÂëµÄÁÙ½çÇø½«¾ºÕùµÄ¿ÉÄÜÐÔ¼õµ½×îС,´Ó¶øÌá¸ßÁË¿ÉÉìËõÐÔ¡£ ʹÓà ¡°Lookaside¡±ÁÐ±í¡£¶ÑÊý¾Ý½á¹¹¶Ô¿éµÄËùÓпÕÏÐÏîʹÓÃÁË´óСÔÚ 8 µ½ 1,024 ×Ö½Ú£¨ÒÔ 8-×Ö½ÚµÝÔö£©µÄ¿ìËÙ¸ßËÙ»º´æ¡£¿ìËÙ¸ßËÙ»º´æ×î³õ±£»¤ÔÚÈ«¾ÖËøÄÚ¡£ÏÖÔÚ£¬Ê¹Óà lookaside ÁбíÀ´·ÃÎÊÕâЩ¿ìËÙ¸ßËÙ»º´æ¿ÕÏÐÁÐ±í¡£ÕâЩÁÐ±í²»ÒªÇóËø¶¨£¬¶øÊÇʹÓà 64 λµÄ»¥Ëø²Ù×÷£¬Òò´ËÌá¸ßÁËÐÔÄÜ¡£ ÄÚ²¿Êý¾Ý½á¹¹Ëã·¨Ò²µÃµ½¸Ä½ø¡£ ÕâЩ¸Ä½ø±ÜÃâÁ˶ԷÖÅä¸ßËÙ»º´æµÄÐèÇ󣬵«²»ÅųýÆäËûµÄÓÅ»¯¡£Ê¹Óà Windows NT5 ¶ÑÆÀ¹ÀÄúµÄ´úÂ룻Ëü¶ÔСÓÚ 1,024 ×Ö½Ú (1 KB) µÄ¿é£¨À´×Ôǰ¶Ë·ÖÅä³ÌÐòµÄ¿é£©ÊÇ×î¼ÑµÄ¡£GlobalAlloc() ºÍ LocalAlloc() ½¨Á¢ÔÚͬһ¶ÑÉÏ£¬ÊÇ´æÈ¡Ã¿¸ö½ø³Ì¶ÑµÄͨÓûúÖÆ¡£Èç¹ûÏ£Íû»ñµÃ¸ßµÄ¾Ö²¿ÐÔÄÜ£¬ÔòʹÓà Heap(R) API À´´æÈ¡Ã¿¸ö½ø³Ì¶Ñ£¬»òΪ·ÖÅä²Ù×÷´´½¨×Ô¼ºµÄ¶Ñ¡£Èç¹ûÐèÒª¶Ô´ó¿é²Ù×÷£¬Ò²¿ÉÒÔÖ±½ÓʹÓà VirtualAlloc() / VirtualFree() ²Ù×÷¡£ ÉÏÊö¸Ä½øÒÑÔÚ Windows 2000 beta 2 ºÍ Windows NT 4.0 SP4 ÖÐʹÓ᣸Ľøºó£¬¶ÑËøµÄ¾ºÕùÂÊÏÔÖø½µµÍ¡£ÕâʹËùÓÐ Win32 ¶ÑµÄÖ±½ÓÓû§ÊÜÒæ¡£CRT ¶Ñ½¨Á¢ÓÚ Win32 ¶ÑµÄ¶¥²¿£¬µ«ËüʹÓÃ×Ô¼ºµÄС¿é¶Ñ£¬Òò¶ø²»ÄÜ´Ó Windows NT ¸Ä½øÖÐÊÜÒæ¡££¨Visual C++ °æ±¾ 6.0 Ò²ÓиĽøµÄ¶Ñ·ÖÅä³ÌÐò¡££© ʹÓ÷ÖÅä¸ßËÙ»º´æ ·ÖÅä¸ßËÙ»º´æÔÊÐí¸ßËÙ»º´æ·ÖÅäµÄ¿é£¬ÒԱ㽫À´ÖØÓá£ÕâÄܹ»¼õÉÙ¶Ô½ø³Ì¶Ñ£¨»òÈ«¾Ö¶Ñ£©µÄ·ÖÅä/Êͷŵ÷ÓõĴÎÊý£¬Ò²ÔÊÐí×î´óÏ޶ȵÄÖØÓÃÔø¾·ÖÅäµÄ¿é¡£ÁíÍ⣬·ÖÅä¸ßËÙ»º´æÔÊÐíÊÕ¼¯Í³¼ÆÐÅÏ¢,ÒÔ±ã½ÏºÃµØÀí½â¶ÔÏóÔڽϸ߲ã´ÎÉϵÄʹÓᣠµäÐ͵أ¬×Ô¶¨Òå¶Ñ·ÖÅä³ÌÐòÔÚ½ø³Ì¶ÑµÄ¶¥²¿ÊµÏÖ¡£×Ô¶¨Òå¶Ñ·ÖÅä³ÌÐòÓëϵͳ¶ÑµÄÐÐΪºÜÏàËÆ¡£Ö÷ÒªµÄ²î±ðÊÇËüÔÚ½ø³Ì¶ÑµÄ¶¥²¿Îª·ÖÅäµÄ¶ÔÏóÌṩ¸ßËÙ»º´æ¡£¸ßËÙ»º´æÉè¼Æ³ÉÒ»Ì׹̶¨´óС£¨Èç 32 ×Ö½Ú¡¢64 ×Ö½Ú¡¢128 ×ֽڵȣ©¡£ÕâÒ»¸öºÜºÃµÄ²ßÂÔ£¬µ«ÕâÖÖ×Ô¶¨Òå¶Ñ·ÖÅä³ÌÐò¶ªÊ§Óë·ÖÅäºÍÊͷŵĶÔÏóÏà¹ØµÄ¡°ÓïÒåÐÅÏ¢¡±¡£ Óë×Ô¶¨Òå¶Ñ·ÖÅä³ÌÐòÏà·´£¬¡°·ÖÅä¸ßËÙ»º´æ¡±×÷ΪÿÀà·ÖÅä¸ßËÙ»º´æÀ´ÊµÏÖ¡£³ýÄܹ»Ìṩ×Ô¶¨Òå¶Ñ·ÖÅä³ÌÐòµÄËùÓкô¦Ö®Í⣬ËüÃÇ»¹Äܹ»±£Áô´óÁ¿ÓïÒåÐÅÏ¢¡£Ã¿¸ö·ÖÅä¸ßËÙ»º´æ´¦Àí³ÌÐòÓëÒ»¸öÄ¿±ê¶þ½øÖƶÔÏó¹ØÁª¡£ËüÄܹ»Ê¹ÓÃÒ»ÌײÎÊý½øÐгõʼ»¯£¬ÕâЩ²ÎÊý±íʾ²¢·¢¼¶±ð¡¢¶ÔÏó´óСºÍ±£³ÖÔÚ¿ÕÏÐÁбíÖеÄÔªËØµÄÊýÁ¿µÈ¡£·ÖÅä¸ßËÙ»º´æ´¦Àí³ÌÐò¶ÔÏóά³Ö×Ô¼ºµÄ˽ÓпÕÏÐʵÌ峨£¨²»³¬¹ýÖ¸¶¨µÄ·§Öµ£©²¢Ê¹ÓÃ˽Óб£»¤Ëø¡£ºÏÔÚÒ»Æð£¬·ÖÅä¸ßËÙ»º´æºÍ˽ÓÐËø¼õÉÙÁËÓëÖ÷ϵͳ¶ÑµÄͨÐÅÁ¿£¬Òò¶øÌṩÁËÔö¼ÓµÄ²¢·¢¡¢×î´óÏ޶ȵÄÖØÓúͽϸߵĿÉÉìËõÐÔ¡£ ÐèҪʹÓÃÇåÀí³ÌÐòÀ´¶¨ÆÚ¼ì²éËùÓзÖÅä¸ßËÙ»º´æ´¦Àí³ÌÐòµÄ»î¶¯Çé¿ö²¢»ØÊÕδÓõÄ×ÊÔ´¡£Èç¹û·¢ÏÖûÓл£¬½«ÊÍ·Å·ÖÅä¶ÔÏóµÄ³Ø£¬´Ó¶øÌá¸ßÐÔÄÜ¡£ ¿ÉÒÔÉóºËÿ¸ö·ÖÅä/ÊͷŻ¡£µÚÒ»¼¶ÐÅÏ¢°üÀ¨¶ÔÏó¡¢·ÖÅäºÍÊͷŵ÷ÓõÄ×ÜÊý¡£Í¨¹ý²é¿´ËüÃǵÄͳ¼ÆÐÅÏ¢¿ÉÒԵóö¸÷¸ö¶ÔÏóÖ®¼äµÄÓïÒå¹ØÏµ¡£ÀûÓÃÒÔÉϽéÉܵÄÐí¶à¼¼ÊõÖ®Ò»£¬ÕâÖÖ¹ØÏµ¿ÉÒÔÓÃÀ´¼õÉÙÄÚ´æ·ÖÅä¡£ ·ÖÅä¸ßËÙ»º´æÒ²Æðµ½Á˵÷ÊÔÖúÊÖµÄ×÷Ó㬰ïÖúÄú¸ú×ÙûÓÐÍêÈ«Çå³ýµÄ¶ÔÏóÊýÁ¿¡£Í¨¹ý²é¿´¶¯Ì¬¶ÑÕ»·µ»Ø×Ù¼£ºÍ³ýûÓÐÇå³ýµÄ¶ÔÏóÖ®ÍâµÄÇ©Ãû£¬ÉõÖÁÄܹ»ÕÒµ½È·ÇеÄʧ°ÜµÄµ÷ÓÃÕß¡£ MP ¶Ñ MP ¶ÑÊǶԶദÀíÆ÷ÓѺõķֲ¼Ê½·ÖÅäµÄ³ÌÐò°ü£¬ÔÚ Win32 SDK£¨Windows NT 4.0 ºÍ¸üа汾£©ÖпÉÒԵõ½¡£×î³õÓÉ JVert ʵÏÖ£¬´Ë´¦¶Ñ³éÏó½¨Á¢ÔÚ Win32 ¶Ñ³ÌÐò°üµÄ¶¥²¿¡£MP ¶Ñ´´½¨¶à¸ö Win32 ¶Ñ£¬²¢ÊÔͼ½«·ÖÅäµ÷Ó÷ֲ¼µ½²»Í¬¶Ñ£¬ÒÔ¼õÉÙÔÚËùÓе¥Ò»ËøÉϵľºÕù¡£ ±¾³ÌÐò°üÊǺõIJ½Öè ¡ªÒ»ÖָĽøµÄ MP-ÓѺõÄ×Ô¶¨Òå¶Ñ·ÖÅä³ÌÐò¡£µ«ÊÇ£¬Ëü²»ÌṩÓïÒåÐÅÏ¢ºÍȱ·¦Í³¼Æ¹¦ÄÜ¡£Í¨³£½« MP ¶Ñ×÷Ϊ SDK ¿âÀ´Ê¹Óá£Èç¹ûʹÓÃÕâ¸ö SDK ´´½¨¿ÉÖØÓÃ×é¼þ£¬Äú½«´ó´óÊÜÒæ¡£µ«ÊÇ£¬Èç¹ûÔÚÿ¸ö DLL Öн¨Á¢Õâ¸ö SDK ¿â£¬½«Ôö¼Ó¹¤×÷ÉèÖá£ ÖØÐÂ˼¿¼Ëã·¨ºÍÊý¾Ý½á¹¹ ÒªÔÚ¶à´¦ÀíÆ÷»úÆ÷ÉÏÉìËõ£¬ÔòËã·¨¡¢ÊµÏÖ¡¢Êý¾Ý½á¹¹ºÍÓ²¼þ±ØÐ붯̬ÉìËõ¡£Çë¿´×î¾³£·ÖÅäºÍÊͷŵÄÊý¾Ý½á¹¹¡£ÊÔÎÊ£¬¡°ÎÒÄÜÓò»Í¬µÄÊý¾Ý½á¹¹Íê³É´Ë¹¤×÷Â𣿡±ÀýÈ磬Èç¹ûÔÚÓ¦ÓóÌÐò³õʼ»¯Ê±¼ÓÔØÁËÖ»¶ÁÏîµÄÁÐ±í£¬Õâ¸öÁÐ±í²»±ØÊÇÏßÐÔÁ´½ÓµÄÁÐ±í¡£Èç¹ûÊǶ¯Ì¬·ÖÅäµÄÊý×é¾Í·Ç³£ºÃ¡£¶¯Ì¬·ÖÅäµÄÊý×齫¼õÉÙÄÚ´æÖеĶѿéºÍË鯬£¬´Ó¶øÔöÇ¿ÐÔÄÜ¡£ ¼õÉÙÐèÒªµÄС¶ÔÏóµÄÊýÁ¿¼õÉÙ¶Ñ·ÖÅä³ÌÐòµÄ¸ºÔØ¡£ÀýÈ磬ÎÒÃÇÔÚ·þÎñÆ÷µÄ¹Ø¼ü´¦Àí·¾¶ÉÏʹÓÃÎå¸ö²»Í¬µÄ¶ÔÏó£¬Ã¿¸ö¶ÔÏóµ¥¶À·ÖÅäºÍÊÍ·Å¡£Ò»Æð¸ßËÙ»º´æÕâЩ¶ÔÏ󣬰Ѷѵ÷ÓôÓÎå¸ö¼õÉÙµ½Ò»¸ö£¬ÏÔÖø¼õÉÙÁ˶ѵĸºÔØ£¬Ìرðµ±Ã¿ÃëÖÓ´¦Àí 1,000 ¸öÒÔÉϵÄÇëÇóʱ¡£ Èç¹û´óÁ¿Ê¹Óá°Automation¡±½á¹¹£¬Ç뿼ÂÇ´ÓÖ÷Ïß´úÂëÖÐɾ³ý¡°Automation BSTR¡±£¬»òÖÁÉÙ±ÜÃâÖØ¸´µÄ BSTR ²Ù×÷¡££¨BSTR Á¬½Óµ¼Ö¹ý¶àµÄÖØ·ÖÅäºÍ·ÖÅä/ÊͷŲÙ×÷¡££© ÕªÒª ¶ÔËùÓÐÆ½Ì¨ÍùÍù¶¼´æÔÚ¶ÑʵÏÖ£¬Òò´ËÓо޴óµÄ¿ªÏú¡£Ã¿¸öµ¥¶À´úÂë¶¼ÓÐÌØ¶¨µÄÒªÇ󣬵«Éè¼ÆÄܲÉÓñ¾ÎÄÌÖÂ۵Ļù±¾ÀíÂÛÀ´¼õÉÙ¶ÑÖ®¼äµÄÏ໥×÷ÓᣠÆÀ¼ÛÄúµÄ´úÂëÖжѵÄʹÓᣠ¸Ä½øÄúµÄ´úÂ룬ÒÔʹÓýÏÉٵĶѵ÷Ó㺷ÖÎö¹Ø¼ü·¾¶ºÍ¹Ì¶¨Êý¾Ý½á¹¹¡£ ÔÚʵÏÖ×Ô¶¨ÒåµÄ°ü×°³ÌÐò֮ǰʹÓÃÁ¿»¯¶Ñµ÷Óóɱ¾µÄ·½·¨¡£ Èç¹û¶ÔÐÔÄܲ»ÂúÒ⣬ÇëÒªÇó OS ×é¸Ä½ø¶Ñ¡£¸ü¶àÕâÀàÇëÇóÒâζ×ŶԸĽø¶ÑµÄ¸ü¶à¹Ø×¢¡£ ÒªÇó C ÔËÐÐʱ×éÕë¶Ô OS ËùÌṩµÄ¶ÑÖÆ×÷СÇɵķÖÅä°ü×°³ÌÐò¡£Ëæ×Å OS ¶ÑµÄ¸Ä½ø£¬C ÔËÐÐʱ¶Ñµ÷Óõijɱ¾½«¼õС¡£ ²Ù×÷ϵͳ£¨Windows NT ¼Ò×壩ÕýÔÚ²»¶Ï¸Ä½ø¶Ñ¡£ÇëËæÊ±¹Ø×¢ºÍÀûÓÃÕâЩ¸Ä½ø¡£ Murali Krishnan ÊÇ Internet Information Server (IIS) ×éµÄÊ×ϯÈí¼þÉè¼Æ¹¤³Ìʦ¡£´Ó 1.0 °æ±¾¿ªÊ¼Ëû¾ÍÉè¼Æ IIS£¬²¢³É¹¦·¢ÐÐÁË 1.0 °æ±¾µ½ 4.0 °æ±¾¡£Murali ×éÖ¯²¢Áìµ¼ IIS ÐÔÄÜ×éÈýÄê (1995-1998), ´ÓÒ»¿ªÊ¼¾ÍÓ°Ïì IIS ÐÔÄÜ¡£ËûÓµÓÐÍþ˹¿µÐÇÖÝ Madison ´óѧµÄ M.S.ºÍÓ¡¶È Anna ´óѧµÄ B.S.¡£¹¤×÷Ö®Í⣬Ëûϲ»¶ÔĶÁ¡¢´òÅÅÇòºÍ¼ÒÍ¥Åëâ¿¡£ http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172835 ÎÒÔÚѧϰ¶ÔÏóµÄÉú´æ·½Ê½µÄʱºò¼ûµ½Ò»ÖÖÊÇÔÚ¶ÑÕ»(stack)Ö®ÖУ¬ÈçÏ CObject object; »¹ÓÐÒ»ÖÖÊÇÔÚ¶Ñ(heap)ÖÐ ÈçÏ CObject* pobject=new CObject(); ÇëÎÊ £¨1£©ÕâÁ½ÖÖ·½Ê½ÓÐÊ²Ã´Çø±ð£¿ £¨2£©¶ÑÕ»Óë¶ÑÓÐÊ²Ã´Çø±ð£¿£¿ --------------------------------------------------------------- 1) about stack, system will allocate memory to the instance of object automatically, and to the heap, you must allocate memory to the instance of object with new or malloc manually. 2) when function ends, system will automatically free the memory area of stack, but to the heap, you must free the memory area manually with free or delete, else it will result in memory leak. 3)Õ»ÄÚ´æ·ÖÅäÔËËãÄÚÖÃÓÚ´¦ÀíÆ÷µÄÖ¸ÁÖУ¬Ð§Âʺܸߣ¬µ«ÊÇ·ÖÅäµÄÄÚ´æÈÝÁ¿ÓÐÏÞ¡£ 4£©¶ÑÉÏ·ÖÅäµÄÄÚ´æ¿ÉÒÔÓÐÎÒÃÇ×Ô¼º¾ö¶¨£¬Ê¹Ó÷dz£Áé»î¡£ --------------------------------------------------------------- ¶ÑºÍÕ»µÄ±È½Ï ´Ó¶ÑºÍÕ»µÄ¹¦ÄܺÍ×÷ÓÃÀ´Í¨Ë׵ıȽÏ,¶ÑÖ÷ÒªÓÃÀ´´æ·Å¶ÔÏóµÄ£¬Õ»Ö÷ÒªÊÇÓÃÀ´Ö´ÐгÌÐòµÄ.¶øÕâÖÖ²»Í¬ÓÖÖ÷ÒªÊÇÓÉÓڶѺÍÕ»µÄÌØµã¾ö¶¨µÄ: ÔÚ±à³ÌÖУ¬ÀýÈçC/C++ÖУ¬ËùÓеķ½·¨µ÷Óö¼ÊÇͨ¹ýÕ»À´½øÐеÄ,ËùÓеľֲ¿±äÁ¿,ÐÎʽ²ÎÊý¶¼ÊÇ´ÓÕ»ÖзÖÅäÄÚ´æ¿Õ¼äµÄ¡£Êµ¼ÊÉÏÒ²²»ÊÇʲô·ÖÅä,Ö»ÊÇ´ÓÕ»¶¥ÏòÉÏÓþÍÐÐ,¾ÍºÃÏñ¹¤³§ÖеĴ«ËÍ´ø(conveyor belt)Ò»Ñù,Stack Pointer»á×Ô¶¯Ö¸ÒýÄãµ½·Å¶«Î÷µÄλÖÃ,ÄãËùÒª×öµÄÖ»ÊǰѶ«Î÷·ÅÏÂÀ´¾ÍÐÐ.Í˳öº¯ÊýµÄʱºò£¬ÐÞ¸ÄÕ»Ö¸Õë¾Í¿ÉÒÔ°ÑÕ»ÖеÄÄÚÈÝÏú»Ù.ÕâÑùµÄģʽËÙ¶È×î¿ì,µ±È»ÒªÓÃÀ´ÔËÐгÌÐòÁË.ÐèҪעÒâµÄÊÇ,ÔÚ·ÖÅäµÄʱºò,±ÈÈçΪһ¸ö¼´½«Òªµ÷ÓõijÌÐòÄ£¿é·ÖÅäÊý¾ÝÇøÊ±,Ó¦ÊÂÏÈÖªµÀÕâ¸öÊý¾ÝÇøµÄ´óС,Ò²¾Í˵ÊÇËäÈ»·ÖÅäÊÇÔÚ³ÌÐòÔËÐÐʱ½øÐеÄ,µ«ÊÇ·ÖÅäµÄ´óС¶àÉÙÊÇÈ·¶¨µÄ,²»±äµÄ,¶øÕâ¸ö"´óС¶àÉÙ"ÊÇÔÚ±àÒëʱȷ¶¨µÄ,²»ÊÇÔÚÔËÐÐʱ. ¶ÑÊÇÓ¦ÓóÌÐòÔÚÔËÐеÄʱºòÇëÇó²Ù×÷ϵͳ·ÖÅ䏸×Ô¼ºÄڴ棬ÓÉÓÚ´Ó²Ù×÷ϵͳ¹ÜÀíµÄÄÚ´æ·ÖÅä,ËùÒÔÔÚ·ÖÅäºÍÏú»Ùʱ¶¼ÒªÕ¼ÓÃʱ¼ä£¬Òò´ËÓöѵÄЧÂʷdz£µÍ.µ«ÊǶѵÄÓŵãÔÚÓÚ,±àÒëÆ÷²»±ØÖªµÀÒª´Ó¶ÑÀï·ÖÅä¶àÉÙ´æ´¢¿Õ¼ä£¬Ò²²»±ØÖªµÀ´æ´¢µÄÊý¾ÝÒªÔÚ¶ÑÀïÍ£Áô¶à³¤µÄʱ¼ä,Òò´Ë,Óöѱ£´æÊý¾Ýʱ»áµÃµ½¸ü´óµÄÁé»îÐÔ¡£ÊÂʵÉÏ,ÃæÏò¶ÔÏóµÄ¶à̬ÐÔ,¶ÑÄÚ´æ·ÖÅäÊDZز»¿ÉÉÙµÄ,ÒòΪ¶à̬±äÁ¿ËùÐèµÄ´æ´¢¿Õ¼äÖ»ÓÐÔÚÔËÐÐʱ´´½¨Á˶ÔÏóÖ®ºó²ÅÄÜÈ·¶¨.ÔÚC++ÖУ¬ÒªÇó´´½¨Ò»¸ö¶ÔÏóʱ£¬Ö»ÐèÓÃnewÃüÁî±àÖÆÏà¹ØµÄ´úÂë¼´¿É¡£Ö´ÐÐÕâЩ´úÂëʱ£¬»áÔÚ¶ÑÀï×Ô¶¯½øÐÐÊý¾ÝµÄ±£´æ.µ±È»£¬Îª´ïµ½ÕâÖÖÁé»îÐÔ£¬±ØÈ»»á¸¶³öÒ»¶¨µÄ´ú¼Û:ÔÚ¶ÑÀï·ÖÅä´æ´¢¿Õ¼äʱ»á»¨µô¸ü³¤µÄʱ¼ä£¡ÕâÒ²ÕýÊǵ¼ÖÂЧÂʵ͵ÄÔÒò, ÎÒÏëÄãÏÖÔÚ¸ÃÃ÷°×Á˰ɡ££º£© |
3Â¥2006-08-23 11:51:28













; 123456\0·ÅÔÚ³£Á¿Çø£¬±àÒëÆ÷¿ÉÄܻὫËüÓëp3ËùÖ¸ÏòµÄ"123456"ÓÅ»¯³ÉÒ»¸öµØ·½¡£
»Ø¸´´ËÂ¥