Ìáµ½CÓïÑÔ£¬ÎÒÃÇÖªµÀCÓïÑÔºÍÆäËû¸ß¼¶ÓïÑÔµÄ×î´óµÄÇø±ð¾ÍÊÇCÓïÑÔÊÇÒª²Ù×÷ÄÚ´æµÄ£¡
ÎÒÃÇÐèÒªÖªµÀ¡ª¡ª±äÁ¿£¬ÆäʵÊÇÄÚ´æµØÖ·µÄÒ»¸ö³éÏñÃû×Ö°ÕÁË¡£ÔÚ¾²Ì¬±àÒëµÄ³ÌÐòÖУ¬ËùÓеıäÁ¿Ãû¶¼»áÔÚ±àÒëʱ±»×ª³ÉÄÚ´æµØÖ·¡£»úÆ÷ÊDz»ÖªµÀÎÒÃÇÈ¡µÄÃû×ֵģ¬Ö»ÖªµÀµØÖ·¡£
ÄÚ´æµÄʹÓÃÊdzÌÐòÉè¼ÆÖÐÐèÒª¿¼ÂǵÄÖØÒªÒòËØÖ®Ò»£¬Õâ²»½öÓÉÓÚϵͳÄÚ´æÊÇÓÐÏ޵ģ¨ÓÈÆäÔÚǶÈëʽϵͳÖУ©£¬¶øÇÒÄÚ´æ·ÖÅäÒ²»áÖ±½ÓÓ°Ïìµ½³ÌÐòµÄЧÂÊ¡£Òò´Ë£¬ÎÒÃÇÒª¶ÔCÓïÑÔÖеÄÄÚ´æ¹ÜÀí£¬ÓиöϵͳµÄÁ˽⡣
ÔÚCÓïÑÔÖУ¬¶¨ÒåÁË4¸öÄÚ´æÇø¼ä£º´úÂëÇø¡¢È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿Çø¡¢¾Ö²¿±äÁ¿Çø¼´Õ»Çø¡¢¶¯Ì¬´æ´¢Çø£¬¼´¶ÑÇø¡£¾ßÌåÈçÏ£º
1¡¢Õ»Çø£¨stack£©¡ª ÓɱàÒëÆ÷×Ô¶¯·ÖÅäÊÍ·Å £¬´æ·Åº¯ÊýµÄ²ÎÊýÖµ£¬¾Ö²¿±äÁ¿µÄÖµµÈ¡£Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£
2¡¢¶ÑÇø£¨heap£© ¡ª Ò»°ãÓɳÌÐòÔ±·ÖÅäÊÍ·Å£¬ Èô³ÌÐòÔ±²»ÊÍ·Å£¬³ÌÐò½áÊøʱ¿ÉÄÜÓÉOS»ØÊÕ ¡£×¢ÒâËüÓëÊý¾Ý½á¹¹ÖеĶÑÊÇÁ½»ØÊ£¬·ÖÅ䷽ʽµ¹ÊÇÀàËÆÓÚÁ´±í£¬ºÇºÇ¡£
3¡¢È«¾ÖÇø£¨¾²Ì¬Çø£©£¨static£©¡ªÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿µÄ´æ´¢ÊÇ·ÅÔÚÒ»¿éµÄ£¬³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿ÔÚÒ»¿éÇøÓò£¬ δ³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍδ³õʼ»¯µÄ¾²Ì¬±äÁ¿ÔÚÏàÁÚµÄ ÁíÒ»¿éÇøÓò¡£ - ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å¡£
4¡¢³£Á¿Çø ¡ª³£Á¿×Ö·û´®¾ÍÊÇ·ÅÔÚÕâÀïµÄ¡£ ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å¡£
5¡¢³ÌÐò´úÂëÇø¡ª´æ·Åº¯ÊýÌåµÄ¶þ½øÖÆ´úÂë¡£
ÎÒÃÇÀ´¿´ÕÅͼ£º
Ê×ÏÈÎÒÃÇÒªÖªµÀ£¬Ô´´úÂë±àÒë³É³ÌÐò£¬³ÌÐòÊÇ·ÅÔÚÓ²ÅÌÉϵģ¬¶ø·ÇÄÚ´æÀֻÓÐÖ´ÐÐʱ²Å»á±»µ÷Óõ½ÄÚ´æÖУ¡
ÎÒÃÇÀ´¿´¿´³ÌÐò½á¹¹£¬ELFÊÇÊÇLinuxµÄÖ÷Òª¿ÉÖ´ÐÐÎļþ¸ñʽ¡£ELFÎļþÓÉ4²¿·Ö×é³É£¬·Ö±ðÊÇELFÍ·£¨ELF header£©¡¢³ÌÐòÍ·±í£¨Program header table£©¡¢½Ú£¨Section£©ºÍ½ÚÍ·±í£¨Section header table£©¡£¾ßÌåÈçÏ£º
1¡¢Program headerÃèÊöµÄÊÇÒ»¸ö¶ÎÔÚÎļþÖеÄλÖᢴóСÒÔ¼°Ëü±»·Å½øÄÚ´æºóËùÔÚµÄλÖúʹóС¡£¼´Òª¼ÓÔصÄÐÅÏ¢£»
2¡¢Sections±£´æ×Åobject ÎļþµÄÐÅÏ¢£¬´ÓÁ¬½Ó½Ç¶È¿´£º°üÀ¨Ö¸ÁÊý¾Ý£¬·ûºÅ±í£¬Öض¨Î»ÐÅÏ¢µÈµÈ¡£ÔÚͼÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½SectionsÖаüÀ¨£º
(1) .text Îı¾½á ´æ·ÅÖ¸Á
(2) .rodata Êý¾Ý½á readonly;
(3) .data Êý¾Ý½á ¿É¶Á¿Éд£»
3¡¢SectionÍ·±í£¨section header table£©°üº¬ÁËÃèÊöÎļþsectionsµÄÐÅÏ¢¡£Ã¿¸ösectionÔÚÕâ¸ö±íÖÐÓÐÒ»¸öÈë¿Ú£»Ã¿¸öÈë¿Ú¸ø³öÁ˸ÃsectionµÄÃû×Ö£¬´óС£¬µÈµÈÐÅÏ¢¡£Ï൱ÓÚ Ë÷Òý£¡
¶ø³ÌÐò±»¼ÓÔص½ÄÚ´æÀïÃ棬ÓÖÊÇÈçºÎ·Ö²¼µÄÄØ£¿ÎÒÃÇ¿´¿´ÉÏͼÖУº
1¡¢ÕýÎĺͳõʼ»¯µÄÊý¾ÝºÍδ³õʼ»¯µÄÊý¾Ý¾ÍÊÇÎÒÃÇËù˵µÄÊý¾Ý¶Î£¬ÕýÎļ´´úÂë¶Î£»
2¡¢ÕýÎĶÎÉÏÃæÊdz£Á¿Çø£¬³£Á¿ÇøÉÏÃæÊÇÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿Çø£¬¶þÕßÕ¼¾ÝµÄ¾ÍÊdzõʼ»¯µÄÊý¾ÝºÍδ³õʼ»¯µÄÊý¾ÝÄDz¿·Ö£»
3¡¢ÔÙÉÏÃæ¾ÍÊǶѣ¬¶¯Ì¬´æ´¢Çø£¬ÕâÀïÊÇÉÏÔö³¤£»
4¡¢¶ÑÉÏÃæÊÇÕ»£¬´æ·ÅµÄÊǾֲ¿±äÁ¿£¬¾ÍÊǾֲ¿±äÁ¿ËùÔÚ´úÂë¿éÖ´ÐÐÍê±Ïºó£¬Õâ¿éÄÚ´æ»á±»ÊÍ·Å£¬ÕâÀïÕ»ÇøÊÇÏÂÔö³¤£»
5¡¢ÃüÁîÐвÎÊý¾ÍÊÇ$0 $1Ö®ÀàµÄ£¬»·¾³±äÁ¿Ê²Ã´µÄÇ°ÃæµÄÎÄÕÂÒѾ½²¹ý£¬ÓÐÐËȤµÄ¿ÉÒÔÈ¥¿´¿´¡£
ÎÒÃÇÖªµÀ£¬ÄÚ´æ·ÖΪ¶¯Ì¬ÄÚ´æºÍ¾²Ì¬Äڴ棬ÎÒÃÇÏȽ²¾²Ì¬ÄÚ´æ¡£
Ò»¡¢¾²Ì¬ÄÚ´æ
ÄÚ´æ¹ÜÀí¡ª¡ª´æ´¢Ä£ÐÍ
´æ´¢Ä£Ð;ö¶¨ÁËÒ»¸ö±äÁ¿µÄÄÚ´æ·ÖÅ䷽ʽºÍ·ÃÎÊÌØÐÔ£¬ÔÚCÓïÑÔÖÐÖ÷ÒªÓÐÈý¸öά¶ÈÀ´¾ö¶¨£º1¡¢´æ´¢Ê±ÆÚ 2¡¢×÷ÓÃÓò 3¡¢Á´½Ó
1¡¢´æ´¢Ê±ÆÚ
´æ´¢Ê±ÆÚ£º±äÁ¿ÔÚÄÚ´æÖеı£Áôʱ¼ä£¨ÉúÃüÖÜÆÚ£©¡£
´æ´¢Ê±ÆÚ·ÖΪÁ½ÖÖÇé¿ö£¬¹Ø¼üÊÇ¿´±äÁ¿ÔÚ³ÌÐòÖ´Ðйý³ÌÖл᲻»á±»ÏµÍ³×Ô¶¯»ØÊÕµô¡£
1) ¾²Ì¬´æ´¢Ê±ÆÚ Static
ÔÚ³ÌÐòÖ´Ðйý³ÌÖÐÒ»µ©·ÖÅä¾Í²»»á±»×Ô¶¯»ØÊÕ¡£
ͨ³£À´Ëµ£¬Èκβ»ÔÚº¯Êý¼¶±ð´úÂë¿éÄÚ¶¨ÒåµÄ±äÁ¿¡£
ÎÞÂÛÊÇ·ñÔÚ´úÂë¿éÄÚ£¬Ö»Òª²ÉÓÃstatic¹Ø¼ü×ÖÐÞÊεıäÁ¿¡£
2) ×Ô¶¯´æ´¢Ê±ÆÚ Automatic
³ýÁ˾²Ì¬´æ´¢ÒÔÍâµÄ±äÁ¿¶¼ÊÇ×Ô¶¯´æ´¢Ê±Æڵģ¬»òÕß˵ֻҪÊÇÔÚ´úÂë¿éÄÚ¶¨ÒåµÄ·ÇstaticµÄ±äÁ¿£¬ÏµÍ³»á¶ÇÆê×Ô¶¯·ÇÅäºÍÊÍ·ÅÄڴ棻
2¡¢×÷ÓÃÓò
×÷ÓÃÓò£ºÒ»¸ö±äÁ¿ÔÚ¶¨Òå¸Ã±äÁ¿µÄ×ÔÉíÎļþÖеĿɼûÐÔ£¨·ÃÎÊ»òÕßÒýÓã©
ÔÚCÓïÑÔÖУ¬Ò»¹²ÓÐ3ÖÐ×÷ÓÃÓò£º
1) ´úÂë¿é×÷ÓÃÓò
ÔÚ´úÂë¿éÖж¨ÒåµÄ±äÁ¿¶¼¾ßÓиôúÂëµÄ×÷ÓÃÓò¡£´ÓÕâ¸ö±äÁ¿¶¨ÒåµØ·½¿ªÊ¼£¬µ½Õâ¸ö´úÂë¿é½áÊø£¬¸Ã±äÁ¿ÊǿɼûµÄ¡£
2) º¯ÊýÔÐÍ×÷ÓÃÓò
³öÏÖÔÚº¯ÊýÔÐÍÖеıäÁ¿£¬¶¼¾ßÓк¯ÊýÔÐÍ×÷ÓÃÓò£¬º¯ÊýÔÐÍ×÷ÓÃÓò´Ó±äÁ¿¶¨Òå´¦Ò»Ö±µ½ÔÐÍÉùÃ÷µÄĩβ¡£
3) Îļþ×÷ÓÃÓò
Ò»¸öÔÚËùÓк¯ÊýÖ®ÍⶨÒåµÄ±äÁ¿¾ßÓÐÎļþ×÷ÓÃÓò£¬¾ßÓÐÎļþ×÷ÓÃÓòµÄ±äÁ¿´ÓËüµÄ¶¨Òå´¦µ½°üº¬¸Ã¶¨ÒåµÄÎļþ½áβ´¦¶¼ÊǿɼûµÄ¡£
3¡¢Á´½Ó
Á´½Ó£ºÒ»¸ö±äÁ¿ÔÚ×é³É³ÌÐòµÄËùÓÐÎļþÖеĿɼûÐÔ£¨·ÃÎÊ»òÕßÒýÓã©£»
CÓïÑÔÖÐÒ»¹²ÓÐÈýÖÖ²»Í¬µÄÁ´½Ó£º
1) ÍⲿÁ´½Ó
Èç¹ûÒ»¸ö±äÁ¿ÔÚ×é³ÉÒ»¸ö³ÌÐòµÄËùÓÐÎļþÖеÄÈκÎλÖö¼¿ÉÒÔ±»·ÃÎÊ£¬Ôò³Æ¸Ã±äÁ¿Ö§³ÖÍⲿÁ´½Ó¡£
2) ÄÚ²¿Á´½Ó
Èç¹ûÒ»¸ö±äÁ¿Ö»¿ÉÒÔÔÚ¶¨ÒåÆä×ÔÉíµÄÎļþÖеÄÈκÎλÖñ»·ÃÎÊ£¬Ôò³Æ¸Ã±äÁ¿Ö§³ÖÄÚ²¿Á´½Ó¡£
3) ¿ÕÁ´½Ó
Èç¹ûÒ»¸ö±äÁ¿Ö»ÊDZ»¶¨ÒåÆä×ÔÉíµÄµ±Ç°´úÂë¿éËù˽ÓУ¬²»Äܱ»³ÌÐòµÄÆäËû²¿·ÖËù·ÃÎÊ£¬Ôò³É¸Ã±äÁ¿Ö§³Ö¿ÕÁ´½Ó¡£
ÎÒÃÇÀ´¿´Ò»¸ö´úÂëʾÀý£º
[cpp] view plain copy
1. #include <stdio.h>
2.
3. int a = 0;// È«¾Ö³õʼ»¯Çø
4. char *p1; //È«¾Öδ³õʼ»¯Çø
5.
6. int main()
7. {
8. int b; //bÔÚÕ»Çø
9. char s[] = "abc"; //Õ»
10. char *p2; //p2ÔÚÕ»Çø
11.
12. char *p3 = "123456"; //123456\0ÔÚ³£Á¿Çø£¬p3ÔÚÕ»ÉÏ¡£
13. static int c =0£» //È«¾Ö£¨¾²Ì¬£©³õʼ»¯Çø
14.
15. p1 = (char *)malloc(10);
16. p2 = (char *)malloc(20); //·ÖÅäµÃÀ´µÃ10ºÍ20×Ö½ÚµÄÇøÓò¾ÍÔÚ¶ÑÇø¡£
17.
18. strcpy(p1, "123456"); //123456\0·ÅÔÚ³£Á¿Çø£¬±àÒëÆ÷¿ÉÄܻὫËüÓëp3ËùÖ¸ÏòµÄ"123456"ÓÅ»¯³ÉÒ»¸öµØ·½¡£
19. }
¶þ¡¢¶¯Ì¬ÄÚ´æ
µ±³ÌÐòÔËÐе½ÐèÒªÒ»¸ö¶¯Ì¬·ÖÅäµÄ±äÁ¿Ê±£¬±ØÐëÏòϵͳÉêÇëÈ¡µÃ¶ÑÖеÄÒ»¿éËùÐè´óСµÄ´æ´¢¿Õ¼ä£¬ÓÃÓÚ´æ´¢¸Ã±äÁ¿¡£µ±²»ÔÚʹÓøñäÁ¿Ê±£¬Ò²¾ÍÊÇËüµÄÉúÃü½áÊøʱ£¬ÒªÏÔʾÊÍ·ÅËüËùÕ¼ÓõĴ洢¿Õ¼ä£¬ÕâÑùϵͳ¾ÍÄÜ¶Ô¸Ã¿Õ¼ä ½øÐÐÔٴηÖÅ䣬×öµ½Öظ´Ê¹ÓÃÓÐÏßµÄ×ÊÔ´¡£ÏÂÃæ½éÉܶ¯Ì¬ÄÚ´æÉêÇëºÍÊͷŵĺ¯Êý¡£
1.1 malloc º¯Êý
mallocº¯ÊýÔÐÍ£º
[cpp] view plain copy
1. #include <stdio.h>
2.
3. void *malloc(size_t size);
sizeÊÇÐèÒª¶¯Ì¬ÉêÇëµÄÄÚ´æµÄ×Ö½ÚÊý¡£ÈôÉêÇë³É¹¦£¬º¯Êý·µ»ØÉêÇëµ½µÄÄÚ´æµÄÆðʼµØÖ·£¬ÈôÉêÇëʧ°Ü£¬·µ»ØNULL¡£ÎÒÃÇ¿´ÏÂÃæÕâ¸öÀý×Ó£º
[cpp] view plain copy
1. int *get_memory(int n)
2. {
3. int *p;
4. p = (int *)malloc(sizeof(int));
5. if(p == NULL)
6. {
7. printf("malloc error\n");
8. return p;
9. }
10.
11. memset(p,0,n*sizeof(int));
12. }
ʹÓøú¯Êýʱ£¬ÓÐÏÂÃ漸µãҪעÒ⣺
1£©Ö»¹ØÐÄÉêÇëÄÚ´æµÄ´óС¡£
2£©ÉêÇëµÄÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æ¡£¼ÇµÃÒ»¶¨ÒªÐ´³ö´íÅжϡ£
3£©ÏÔʾ³õʼ»¯¡£¼´ÎÒÃDz»ÖªÕâ¿éÄÚ´æÖÐÓÐʲô¶«Î÷£¬Òª¶ÔÆäÇåÁã¡£
1.2 freeº¯Êý
ÔÚ¶ÑÉÏ·ÖÅäµÄ¶îÄڴ棬ÐèÒªÓÃfreeº¯ÊýÏÔʾÊÍ·Å£¬º¯ÊýÔÐÍÈçÏ£º
[cpp] view plain copy
#include <stdlib.h>
void free(void *ptr);
ʹÓÃfree(),Ò²ÓÐÏÂÃ漸µãҪעÒ⣺
1£©±ØÐëÌṩÄÚ´æµÄÆðʼµØÖ·£»
µ÷Óøú¯Êýʱ£¬±ØÐëÌṩÄÚ´æµÄÆðʼµØÖ·£¬²»Äܹ»Ìṩ²¿·ÖµØÖ·£¬ÊÍ·ÅÄÚ´æÖеÄÒ»²¿·ÖÊDz»ÔÊÐíµÄ¡£
2£©mallocºÍfreeÅä¶ÔʹÓã»
±àÒëÆ÷²»¸ºÔð¶¯Ì¬ÄÚ´æµÄÊÍ·Å£¬ÐèÒª³ÌÐòÔ±ÏÔʾÊÍ·Å¡£Òò´Ë£¬mallocÓëfreeÊÇÅä¶ÔʹÓõģ¬±ÜÃâÄÚ´æй©¡£
[cpp] view plain copy
free(p);
p = NULL£»
p = NULLÊDZØÐëµÄ£¬ÒòΪËäÈ»Õâ¿éÄÚ´æ±»ÊÍ·ÅÁË£¬µ«ÊÇpÈÔÖ¸ÏòÕâ¿éÄڴ棬±ÜÃâÏ´ζÔpµÄÎó²Ù×÷£»
3£©²»ÔÊÐíÖظ´ÊÍ·Å
ÒòΪÕâ¿éÄÚ´æ±»Êͷź󣬿ÉÄÜÒÑÁí·ÖÅ䣬Õâ¿éÇøÓò±»±ðÈËÕ¼Óã¬Èç¹ûÔÙ´ÎÊÍ·Å£¬»áÔì³ÉÊý¾Ý¶ªÊ§£»
2¡¢ÎÒÃǾ³£½«¶ÑºÍÕ»Ïà±È½Ï
2.1ÉêÇ뷽ʽ
stack: ÓÉϵͳ×Ô¶¯·ÖÅä¡£ ÀýÈ磬ÉùÃ÷ÔÚº¯ÊýÖÐÒ»¸ö¾Ö²¿±äÁ¿ int b; ϵͳ×Ô¶¯ÔÚÕ»ÖÐΪb¿ª±Ù¿Õ¼ä ¡£
heap: ÐèÒª³ÌÐòÔ±×Ô¼ºÉêÇ룬²¢Ö¸Ã÷´óС£¬ÔÚcÖÐmallocº¯Êý ,Èçp1 = (char *)malloc(10);
2.2 ÉêÇëºóϵͳµÄÏìÓ¦
Õ»£ºÖ»ÒªÕ»µÄÊ£Óà¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼ä£¬ÏµÍ³½«Îª³ÌÐòÌṩÄڴ棬·ñÔò½«±¨Òì³£ÌáʾջÒç³ö¡£
¶Ñ£ºÊ×ÏÈÓ¦¸ÃÖªµÀ²Ù×÷ϵͳÓÐÒ»¸ö¼Ç¼¿ÕÏÐÄÚ´æµØÖ·µÄÁ´±í£¬µ±ÏµÍ³ÊÕµ½³ÌÐòµÄÉêÇëʱ£¬»á±éÀú¸ÃÁ´±í£¬Ñ°ÕÒµÚÒ»¸ö¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼äµÄ¶Ñ½áµã£¬È»ºó½«¸Ã½áµã´Ó¿ÕÏнáµãÁ´±íÖÐɾ³ý£¬²¢½«¸Ã½áµãµÄ¿Õ¼ä·ÖÅä¸ø³ÌÐò£¬ÁíÍ⣬¶ÔÓÚ´ó¶àÊýϵͳ£¬»áÔÚÕâ¿éÄÚ´æ¿Õ¼äÖеÄÊ×µØÖ·´¦¼Ç¼±¾´Î·ÖÅäµÄ´óС£¬ÕâÑù£¬´úÂëÖеÄdeleteÓï¾ä²ÅÄÜÕýÈ·µÄÊͷű¾ÄÚ´æ¿Õ¼ä¡£ÁíÍ⣬ÓÉÓÚÕÒµ½µÄ¶Ñ½áµãµÄ´óС²»Ò»¶¨ÕýºÃµÈÓÚÉêÇëµÄ´óС£¬ÏµÍ³»á×Ô¶¯µÄ½«¶àÓàµÄÄDz¿·ÖÖØзÅÈë¿ÕÏÐÁ´±íÖС£
2.3ÉêÇë´óСµÄÏÞÖÆ
Õ»£ºÕ»ÊÇÏòµÍµØÖ·À©Õ¹µÄÊý¾Ý½á¹¹£¬ÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æµÄÇøÓò¡£Õâ¾ä»°µÄÒâ˼ÊÇÕ»¶¥µÄµØÖ·ºÍÕ»µÄ×î´óÈÝÁ¿ÊÇϵͳԤÏȹ涨ºÃµÄ£¬Õ»µÄ´óСÊÇ2M£¨Ò²ÓеÄ˵ÊÇ1M£¬×ÜÖ®ÊÇÒ»¸ö±àÒëʱ¾ÍÈ·¶¨µÄ³£Êý£©£¬Èç¹ûÉêÇëµÄ¿Õ¼ä³¬¹ýÕ»µÄÊ£Óà¿Õ¼äʱ£¬½«Ìáʾoverflow¡£Òò´Ë£¬ÄÜ´ÓÕ»»ñµÃµÄ¿Õ¼ä½ÏС¡£
¶Ñ£º¶ÑÊÇÏò¸ßµØÖ·À©Õ¹µÄÊý¾Ý½á¹¹£¬ÊDz»Á¬ÐøµÄÄÚ´æÇøÓò¡£ÕâÊÇÓÉÓÚϵͳÊÇÓÃÁ´±íÀ´´æ´¢µÄ¿ÕÏÐÄÚ´æµØÖ·µÄ£¬×ÔÈ»ÊDz»Á¬ÐøµÄ£¬¶øÁ´±íµÄ±éÀú·½ÏòÊÇÓɵ͵ØÖ·Ïò¸ßµØÖ·¡£¶ÑµÄ´óСÊÜÏÞÓÚ¼ÆËã»úϵͳÖÐÓÐЧµÄÐéÄâÄÚ´æ¡£Óɴ˿ɼû£¬¶Ñ»ñµÃµÄ¿Õ¼ä±È½ÏÁé»î£¬Ò²±È½Ï´ó¡£
2.4ÉêÇëЧÂʵıȽÏ
Õ»ÓÉϵͳ×Ô¶¯·ÖÅ䣬ËٶȽϿ졣µ«³ÌÐòÔ±ÊÇÎÞ·¨¿ØÖƵġ£
¶ÑÊÇÓÉnew·ÖÅäµÄÄڴ棬һ°ãËٶȱȽÏÂý£¬¶øÇÒÈÝÒײúÉúÄÚ´æËéƬ,²»¹ýÓÃÆðÀ´×î·½±ã¡£
2.5¶ÑºÍÕ»ÖеĴ洢ÄÚÈÝ
Õ»£º ÔÚº¯Êýµ÷ÓÃʱ£¬µÚÒ»¸ö½øÕ»µÄÊÇÖ÷º¯ÊýÖкóµÄÏÂÒ»ÌõÖ¸Áº¯Êýµ÷ÓÃÓï¾äµÄÏÂÒ»Ìõ¿ÉÖ´ÐÐÓï¾ä£©µÄµØÖ·£¬È»ºóÊǺ¯ÊýµÄ¸÷¸ö²ÎÊý£¬ÔÚ´ó¶àÊýµÄC±àÒëÆ÷ÖУ¬²ÎÊýÊÇÓÉÓÒÍù×óÈëÕ»µÄ£¬È»ºóÊǺ¯ÊýÖеľֲ¿±äÁ¿¡£×¢Ò⾲̬±äÁ¿ÊDz»ÈëÕ»µÄ¡£ µ±±¾´Îº¯Êýµ÷ÓýáÊøºó£¬¾Ö²¿±äÁ¿ÏȳöÕ»£¬È»ºóÊDzÎÊý£¬×îºóÕ»¶¥Ö¸ÕëÖ¸Ïò×ʼ´æµÄµØÖ·£¬Ò²¾ÍÊÇÖ÷º¯ÊýÖеÄÏÂÒ»ÌõÖ¸Á³ÌÐòÓɸõã¼ÌÐøÔËÐС£
¶Ñ£ºÒ»°ãÊÇÔڶѵÄÍ·²¿ÓÃÒ»¸ö×Ö½Ú´æ·Å¶ÑµÄ´óС¡£¶ÑÖеľßÌåÄÚÈÝÓɳÌÐòÔ±°²ÅÅ¡£
2.6´æȡЧÂʵıȽÏ
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaaÊÇÔÚÔËÐÐʱ¿Ì¸³ÖµµÄ£»
¶øbbbbbbbbbbbÊÇÔÚ±àÒëʱ¾ÍÈ·¶¨µÄ£»
µ«ÊÇ£¬ÔÚÒÔºóµÄ´æÈ¡ÖУ¬ÔÚÕ»ÉϵÄÊý×é±ÈÖ¸ÕëËùÖ¸ÏòµÄ×Ö·û´®(ÀýÈç¶Ñ)¿ì¡£
±ÈÈ磺
[cpp] view plain copy
1. #include
2. void main()
3. {
4. char a = 1;
5. char c[] = "1234567890";
6. char *p ="1234567890";
7. a = c[1];
8. a = p[1];
9. return;
10. }
¶ÔÓ¦µÄ»ã±à´úÂë £º
[cpp] view plain copy
1. 0: a = c[1];
2. 00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
3. 0040106A 88 4D FC mov byte ptr [ebp-4],cl
4. 11: a = p[1];
5. 0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
6. 00401070 8A 42 01 mov al,byte ptr [edx+1]
7. 00401073 88 45 FC mov byte ptr [ebp-4],al
µÚÒ»ÖÖÔÚ¶Áȡʱֱ½Ó¾Í°Ñ×Ö·û´®ÖеÄÔªËضÁµ½¼Ä´æÆ÷clÖУ¬¶øµÚ¶þÖÖÔòÒªÏÈ°ÑÖ¸ÕëÖµ¶Áµ½edxÖУ¬ÔÙ¸ù¾Ýedx¶ÁÈ¡×Ö·û£¬ÏÔÈ»ÂýÁË¡£