²é¿´: 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 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

×îºóÀ´ËµËµÄÚ´æÖеÄÊý¾Ý¶ÔÆë¡£ËùλÊý¾Ý¶ÔÆë£¬ÊÇÖ¸Êý¾ÝËùÔÚµÄÄÚ´æµØÖ·±ØÐëÊǸÃÊý¾Ý³¤¶ÈµÄÕûÊý±¶£¬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
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

ÆäËûÌá¸ßÐÔÄܵļ¼Êõ
ÏÂÃæÊÇһЩÌá¸ßËٶȵļ¼Êõ£º

ʹÓà 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
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sdlj8051 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á£¬Çóµ¼Ê¦ÊÕ +6 ÌìÌìºÃÔËÀ´Éϰ¶° 2026-03-24 6/300 2026-03-24 17:19 by dick_runner
[¿¼²©] É격26Äê +4 °Ë6°Ë68 2026-03-19 4/200 2026-03-24 15:49 by СBenºÇºÇ
[¿¼ÑÐ] Ò»Ö¾Ô¸ºÓ±±¹¤Òµ´óѧ0817»¯¹¤278·ÖÇóµ÷¼Á +7 jhybd 2026-03-23 12/600 2026-03-24 09:03 by jhybd
[¿¼ÑÐ] 276Çóµ÷¼Á¡£ÓаëÄêµç³ØºÍ°ëÄê¸ß·Ö×Óʵϰ¾­Àú +9 ²ÄÁÏѧ257Çóµ÷¼Á 2026-03-23 10/500 2026-03-24 07:36 by wangy0907
[¿¼ÑÐ] 327Çóµ÷¼Á +5 prayer13 2026-03-23 5/250 2026-03-23 22:11 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] »¯Ñ§308·ÖÇóµ÷¼Á +3 ÄãºÃÃ÷ÌìÄãºÃ 2026-03-23 3/150 2026-03-23 20:11 by macy2011
[¿¼ÑÐ] ¹¤¿Æ0856Çóµ÷¼Á +5 ãåÎö͡͡ 2026-03-21 5/250 2026-03-23 17:56 by º£ÉªÞ±-
[¿¼ÑÐ] 289²ÄÁÏÓ뻯¹¤£¨085600£©BÇøÇóµ÷¼Á +3 ÕâôÃû×ÖÕ¦Ñù 2026-03-22 4/200 2026-03-22 17:56 by ÔÆÃñ´óÀîÀÏʦ
[¿¼ÑÐ] 308Çóµ÷¼Á +3 īīĮ 2026-03-21 3/150 2026-03-22 16:54 by i_cooler
[¿¼ÑÐ] Ò»Ö¾Ô¸ Î÷±±´óѧ £¬070300»¯Ñ§Ñ§Ë¶£¬×Ü·Ö287£¬Ë«·ÇÒ»±¾£¬Çóµ÷¼Á¡£ +3 ³¿»èÏßÓëÐǺ£ 2026-03-20 3/150 2026-03-22 16:00 by ColorlessPI
[¿¼ÑÐ] Çóµ÷¼ÁԺУÐÅÏ¢ +6 CX 330 2026-03-21 6/300 2026-03-22 15:25 by ÎÞи¿É»÷111
[¿¼ÑÐ] ÉúÎïѧµ÷¼Á +5 Surekei 2026-03-21 5/250 2026-03-22 14:39 by tcx007
[¿¼ÑÐ] Çóµ÷¼Á +5 Zhangbod 2026-03-21 7/350 2026-03-22 13:13 by Zhangbod
[¿¼ÑÐ] ³õÊÔ 317 +7 °ëÀ­Ô±û 2026-03-20 7/350 2026-03-21 22:26 by peike
[¿¼ÑÐ] 0703»¯Ñ§297Çóµ÷¼Á +3 Daisy¡î 2026-03-20 3/150 2026-03-21 17:45 by ColorlessPI
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤£¨0856£©304Çó BÇø µ÷¼Á +3 Çñgl 2026-03-21 3/150 2026-03-21 13:47 by lature00
[¿¼ÑÐ] 296Çóµ÷¼Á +6 www_q 2026-03-18 10/500 2026-03-20 23:56 by JourneyLucky
[¿¼ÑÐ] 22408 344·Ö Çóµ÷¼Á Ò»Ö¾Ô¸ »ªµç¼ÆËã»ú¼¼Êõ +4 solanXXX 2026-03-20 4/200 2026-03-20 23:49 by alg094825
[¿¼ÑÐ] Ò»Ö¾Ô¸Öк£Ñó²ÄÁϹ¤³Ìר˶330·ÖÇóµ÷¼Á +8 С²Ä»¯±¾¿Æ 2026-03-18 8/400 2026-03-20 23:16 by JourneyLucky
[¿¼ÑÐ] 295²ÄÁÏÇóµ÷¼Á£¬Ò»Ö¾Ô¸Î人Àí¹¤085601ר˶ +5 Charlieyq 2026-03-19 5/250 2026-03-20 20:35 by JourneyLucky
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û