Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¸É»õ | ǶÈëʽCµÄÕâЩ¸ß¼¶Ó÷¨Äã¶¼»áÁËÂð£¿
 
  1769  次浏览      28
 2021-7-6
 
±à¼­ÍƼö:
±¾½ÚÖ÷Òª×ܽáÁËǶÈëʽCµÄһЩÓ÷¨£¬°üÀ¨ÄÚ´æ¹ÜÀí¡¢¾²Ì¬ÄÚ´æ¡¢¶¯Ì¬ÄÚ´æ¡¢×÷ÓÃÓò¡¢Á´½Ó ¡¢ÄÚ´æ¶ÔÆë£¬Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚµç×Ó¹¤³ÌÊÀ½ç-ÍøÂçÕûÀí£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

ÄÚ´æ¹ÜÀí

ÎÒÃÇÐèÒªÖªµÀ¡ª¡ª±äÁ¿£¬ÆäʵÊÇÄÚ´æµØÖ·µÄÒ»¸ö³éÏñÃû×Ö°ÕÁË¡£ÔÚ¾²Ì¬±àÒëµÄ³ÌÐòÖУ¬ËùÓеıäÁ¿Ãû¶¼»áÔÚ±àÒëʱ±»×ª³ÉÄÚ´æµØÖ·¡£»úÆ÷ÊDz»ÖªµÀÎÒÃÇÈ¡µÄÃû×ֵģ¬Ö»ÖªµÀµØÖ·¡£

ÄÚ´æµÄʹÓÃʱ³ÌÐòÉè¼ÆÖÐÐèÒª¿¼ÂǵÄÖØÒªÒòËØÖ®Ò»£¬Õâ²»½öÓÉÓÚϵͳÄÚ´æÊÇÓÐÏ޵ģ¨ÓÈÆäÔÚǶÈëʽϵͳÖУ©£¬¶øÇÒÄÚ´æ·ÖÅäÒ²»áÖ±½ÓÓ°Ïìµ½³ÌÐòµÄЧÂÊ¡£Òò´Ë£¬ÎÒÃÇÒª¶ÔCÓïÑÔÖеÄÄÚ´æ¹ÜÀí£¬ÓиöϵͳµÄÁ˽⡣

ÔÚCÓïÑÔÖУ¬¶¨ÒåÁË4¸öÄÚ´æÇø¼ä£º´úÂëÇø£»È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿Çø£»¾Ö²¿±äÁ¿Çø¼´Õ»Çø£»¶¯Ì¬´æ´¢Çø£¬¼´¶ÑÇø£»¾ßÌåÈçÏ£º

1¡¢Õ»Çø£¨stack£©¡ª ÓɱàÒëÆ÷×Ô¶¯·ÖÅäÊÍ·Å £¬´æ·Åº¯ÊýµÄ²ÎÊýÖµ£¬¾Ö²¿±äÁ¿µÄÖµµÈ¡£Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£

2¡¢¶ÑÇø£¨heap£© ¡ª Ò»°ãÓɳÌÐòÔ±·ÖÅäÊÍ·Å£¬ Èô³ÌÐòÔ±²»ÊÍ·Å£¬³ÌÐò½áÊøÊ±¿ÉÄÜÓÉOS»ØÊÕ ¡£×¢ÒâËüÓëÊý¾Ý½á¹¹ÖеĶÑÊÇÁ½»ØÊ£¬·ÖÅ䷽ʽµ¹ÊÇÀàËÆÓÚÁ´±í¡£

3¡¢È«¾ÖÇø£¨¾²Ì¬Çø£©£¨static£©¡ªÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿µÄ´æ´¢ÊÇ·ÅÔÚÒ»¿éµÄ£¬³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿ÔÚÒ»¿éÇøÓò£¬ δ³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍδ³õʼ»¯µÄ¾²Ì¬±äÁ¿ÔÚÏàÁÚµÄ ÁíÒ»¿éÇøÓò¡£ - ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å¡£

4¡¢³£Á¿Çø ¡ª³£Á¿×Ö·û´®¾ÍÊÇ·ÅÔÚÕâÀïµÄ¡£ ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å¡£

5¡¢³ÌÐò´úÂëÇø¡ª´æ·Åº¯ÊýÌåµÄ¶þ½øÖÆ´úÂë¡£

ÎÒÃÇÀ´¿´ÕÅͼ£º

ͼ1

Ê×ÏÈÎÒÃÇÒªÖªµÀ£¬Ô´´úÂë±àÒë³É³ÌÐò£¬³ÌÐòÊÇ·ÅÔÚÓ²ÅÌÉϵ쬶ø·ÇÄÚ´æÀֻÓÐÖ´ÐÐʱ²Å»á±»µ÷Óõ½ÄÚ´æÖУ¡ÎÒÃÇÀ´¿´¿´³ÌÐò½á¹¹£¬ELFÊÇÊÇLinuxµÄÖ÷Òª¿ÉÖ´ÐÐÎļþ¸ñʽ¡£ELFÎļþÓÉ4²¿·Ö×é³É£¬·Ö±ðÊÇELFÍ·£¨ELF header£©¡¢³ÌÐòÍ·±í£¨Program header table£©¡¢½Ú£¨Section£©ºÍ½ÚÍ·±í£¨Section header table£©¡£¾ßÌåÈçÏ£º

1¡¢Program headerÃèÊöµÄÊÇÒ»¸ö¶ÎÔÚÎļþÖеÄλÖᢴóСÒÔ¼°Ëü±»·Å½øÄÚ´æºóËùÔÚµÄλÖúʹóС¡£¼´Òª¼ÓÔØµÄÐÅÏ¢£»

2¡¢Sections±£´æ×Åobject ÎļþµÄÐÅÏ¢£¬´ÓÁ¬½Ó½Ç¶È¿´£º°üÀ¨Ö¸ÁÊý¾Ý£¬·ûºÅ±í£¬Öض¨Î»ÐÅÏ¢µÈµÈ¡£ÔÚͼÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½SectionsÖаüÀ¨£º

text Îı¾½á ´æ·ÅÖ¸Á

rodata Êý¾Ý½á readonly;

data Êý¾Ý½á ¿É¶Á¿Éд£»

3¡¢SectionÍ·±í£¨section header table£©°üº¬ÁËÃèÊöÎļþsectionsµÄÐÅÏ¢¡£Ã¿¸ösectionÔÚÕâ¸ö±íÖÐÓÐÒ»¸öÈë¿Ú£»Ã¿¸öÈë¿Ú¸ø³öÁ˸ÃsectionµÄÃû×Ö£¬´óС£¬µÈµÈÐÅÏ¢¡£Ï൱ÓÚ Ë÷Òý£¡

¶ø³ÌÐò±»¼ÓÔØµ½ÄÚ´æÀïÃæ£¬ÓÖÊÇÈçºÎ·Ö²¼µÄÄØ£¿ÎÒÃÇ¿´¿´ÉÏͼÖУº

1¡¢ÕýÎĺͳõʼ»¯µÄÊý¾ÝºÍδ³õʼ»¯µÄÊý¾Ý¾ÍÊÇÎÒÃÇËù˵µÄÊý¾Ý¶Î£¬ÕýÎļ´´úÂë¶Î£»

2¡¢ÕýÎĶÎÉÏÃæÊdz£Á¿Çø£¬³£Á¿ÇøÉÏÃæÊÇÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿Çø£¬¶þÕßÕ¼¾ÝµÄ¾ÍÊdzõʼ»¯µÄÊý¾ÝºÍδ³õʼ»¯µÄÊý¾ÝÄDz¿·Ö£»

3¡¢ÔÙÉÏÃæ¾ÍÊǶѣ¬¶¯Ì¬´æ´¢Çø£¬ÕâÀïÊÇÉÏÔö³¤£»

4¡¢¶ÑÉÏÃæÊÇÕ»£¬´æ·ÅµÄÊǾֲ¿±äÁ¿£¬¾ÍÊǾֲ¿±äÁ¿ËùÔÚ´úÂë¿éÖ´ÐÐÍê±Ïºó£¬Õâ¿éÄÚ´æ»á±»ÊÍ·Å£¬ÕâÀïÕ»ÇøÊÇÏÂÔö³¤£»

5¡¢ÃüÁîÐвÎÊý¾ÍÊÇ001Ö®ÀàµÄ£¬»·¾³±äÁ¿Ê²Ã´µÄÇ°ÃæµÄÎÄÕÂÒѾ­½²¹ý£¬ÓÐÐËȤµÄ¿ÉÒÔÈ¥¿´¿´¡£

ÎÒÃÇÖªµÀ£¬ÄÚ´æ·ÖΪ¶¯Ì¬ÄÚ´æºÍ¾²Ì¬Äڴ棬ÎÒÃÇÏȽ²¾²Ì¬ÄÚ´æ¡£

¾²Ì¬ÄÚ´æ

´æ´¢Ä£Ð;ö¶¨ÁËÒ»¸ö±äÁ¿µÄÄÚ´æ·ÖÅ䷽ʽºÍ·ÃÎÊÌØÐÔ£¬ÔÚCÓïÑÔÖÐÖ÷ÒªÓÐÈý¸öά¶ÈÀ´¾ö¶¨£º´æ´¢Ê±ÆÚ ¡¢×÷ÓÃÓò ¡¢Á´½Ó¡£

´æ´¢Ê±ÆÚ

´æ´¢Ê±ÆÚ£º±äÁ¿ÔÚÄÚ´æÖеı£Áôʱ¼ä£¨ÉúÃüÖÜÆÚ£©

´æ´¢Ê±ÆÚ·ÖΪÁ½ÖÖÇé¿ö£¬¹Ø¼üÊÇ¿´±äÁ¿ÔÚ³ÌÐòÖ´Ðйý³ÌÖл᲻»á±»ÏµÍ³×Ô¶¯»ØÊÕµô¡£

1) ¾²Ì¬´æ´¢Ê±ÆÚ Static

ÔÚ³ÌÐòÖ´Ðйý³ÌÖÐÒ»µ©·ÖÅä¾Í²»»á±»×Ô¶¯»ØÊÕ¡£

ͨ³£À´Ëµ£¬Èκβ»ÔÚº¯Êý¼¶±ð´úÂë¿éÄÚ¶¨ÒåµÄ±äÁ¿¡£

ÎÞÂÛÊÇ·ñÔÚ´úÂë¿éÄÚ£¬Ö»Òª²ÉÓÃstatic¹Ø¼ü×ÖÐÞÊεıäÁ¿¡£

2) ×Ô¶¯´æ´¢Ê±ÆÚ Automatic

³ýÁ˾²Ì¬´æ´¢ÒÔÍâµÄ±äÁ¿¶¼ÊÇ×Ô¶¯´æ´¢Ê±ÆÚµÄ£¬»òÕß˵ֻҪÊÇÔÚ´úÂë¿éÄÚ¶¨ÒåµÄ·ÇstaticµÄ±äÁ¿£¬ÏµÍ³»á¶ÇÆê×Ô¶¯·ÇÅäºÍÊÍ·ÅÄڴ棻

×÷ÓÃÓò

×÷ÓÃÓò£ºÒ»¸ö±äÁ¿ÔÚ¶¨Òå¸Ã±äÁ¿µÄ×ÔÉíÎļþÖеĿɼûÐÔ£¨·ÃÎÊ»òÕßÒýÓã©

ÔÚCÓïÑÔÖУ¬Ò»¹²ÓÐ3ÖÐ×÷ÓÃÓò£º

1) ´úÂë¿é×÷ÓÃÓò

ÔÚ´úÂë¿éÖж¨ÒåµÄ±äÁ¿¶¼¾ßÓиôúÂëµÄ×÷ÓÃÓò¡£´ÓÕâ¸ö±äÁ¿¶¨Ò嵨·½¿ªÊ¼£¬µ½Õâ¸ö´úÂë¿é½áÊø£¬¸Ã±äÁ¿ÊǿɼûµÄ£»

2) º¯ÊýÔ­ÐÍ×÷ÓÃÓò

³öÏÖÔÚº¯ÊýÔ­ÐÍÖеıäÁ¿£¬¶¼¾ßÓк¯ÊýÔ­ÐÍ×÷ÓÃÓò£¬º¯ÊýÔ­ÐÍ×÷ÓÃÓò´Ó±äÁ¿¶¨Òå´¦Ò»Ö±µ½Ô­ÐÍÉùÃ÷µÄĩβ¡£

3) Îļþ×÷ÓÃÓò

Ò»¸öÔÚËùÓк¯ÊýÖ®ÍⶨÒåµÄ±äÁ¿¾ßÓÐÎļþ×÷ÓÃÓò£¬¾ßÓÐÎļþ×÷ÓÃÓòµÄ±äÁ¿´ÓËüµÄ¶¨Òå´¦µ½°üº¬¸Ã¶¨ÒåµÄÎļþ½áβ´¦¶¼ÊǿɼûµÄ£»

Á´½Ó

Á´½Ó£ºÒ»¸ö±äÁ¿ÔÚ×é³É³ÌÐòµÄËùÓÐÎļþÖеĿɼûÐÔ£¨·ÃÎÊ»òÕßÒýÓã©£»

CÓïÑÔÖÐÒ»¹²ÓÐÈýÖÖ²»Í¬µÄÁ´½Ó£º

1) ÍⲿÁ´½Ó

Èç¹ûÒ»¸ö±äÁ¿ÔÚ×é³ÉÒ»¸ö³ÌÐòµÄËùÓÐÎļþÖеÄÈκÎλÖö¼¿ÉÒÔ±»·ÃÎÊ£¬Ôò³Æ¸Ã±äÁ¿Ö§³ÖÍⲿÁ´½Ó£»

2) ÄÚ²¿Á´½Ó

Èç¹ûÒ»¸ö±äÁ¿Ö»¿ÉÒÔÔÚ¶¨ÒåÆä×ÔÉíµÄÎļþÖеÄÈκÎλÖñ»·ÃÎÊ£¬Ôò³Æ¸Ã±äÁ¿Ö§³ÖÄÚ²¿Á´½Ó¡£

3) ¿ÕÁ´½Ó

Èç¹ûÒ»¸ö±äÁ¿Ö»ÊDZ»¶¨ÒåÆä×ÔÉíµÄµ±Ç°´úÂë¿éËù˽ÓУ¬²»Äܱ»³ÌÐòµÄÆäËû²¿·ÖËù·ÃÎÊ£¬Ôò³É¸Ã±äÁ¿Ö§³Ö¿ÕÁ´½Ó

ÎÒÃÇÀ´¿´Ò»¸ö´úÂëʾÀý£º

#include <stdio.h>

int a = 0;// È«¾Ö³õʼ»¯Çø

char *p1; //È«¾Öδ³õʼ»¯Çø

int main()

{

int b; //bÔÚÕ»Çø

char s[] = "abc"; //Õ»

char *p2; //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"ÓÅ»¯³ÉÒ»¸öµØ·½¡£

}

1.2¶¯Ì¬ÄÚ´æ

µ±³ÌÐòÔËÐе½ÐèÒªÒ»¸ö¶¯Ì¬·ÖÅäµÄ±äÁ¿Ê±£¬±ØÐëÏòϵͳÉêÇëÈ¡µÃ¶ÑÖеÄÒ»¿éËùÐè´óСµÄ´æ´¢¿Õ¼ä£¬ÓÃÓÚ´æ´¢¸Ã±äÁ¿¡£µ±²»ÔÚʹÓøñäÁ¿Ê±£¬Ò²¾ÍÊÇËüµÄÉúÃü½áÊøÊ±£¬ÒªÏÔʾÊÍ·ÅËüËùÕ¼ÓõĴ洢¿Õ¼ä£¬ÕâÑùϵͳ¾ÍÄÜ¶Ô¸Ã¿Õ¼ä ½øÐÐÔٴηÖÅ䣬×öµ½Öظ´Ê¹ÓÃÓÐÏßµÄ×ÊÔ´¡£ÏÂÃæ½éÉܶ¯Ì¬ÄÚ´æÉêÇëºÍÊͷŵĺ¯Êý¡£

1.2.1 malloc º¯Êý

mallocº¯ÊýÔ­ÐÍ£º

sizeÊÇÐèÒª¶¯Ì¬ÉêÇëµÄÄÚ´æµÄ×Ö½ÚÊý¡£ÈôÉêÇë³É¹¦£¬º¯Êý·µ»ØÉêÇëµ½µÄÄÚ´æµÄÆðʼµØÖ·£¬ÈôÉêÇëʧ°Ü£¬·µ»ØNULL¡£ÎÒÃÇ¿´ÏÂÃæÕâ¸öÀý×Ó£º

ʹÓøú¯Êýʱ£¬ÓÐÏÂÃæ¼¸µãҪעÒ⣺

1£©Ö»¹ØÐÄÉêÇëÄÚ´æµÄ´óС£»

2£©ÉêÇëµÄÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æ¡£¼ÇµÃÒ»¶¨ÒªÐ´³ö´íÅжϣ»

3£©ÏÔʾ³õʼ»¯¡£¼´ÎÒÃDz»ÖªÕâ¿éÄÚ´æÖÐÓÐʲô¶«Î÷£¬Òª¶ÔÆäÇåÁ㣻

1.2.2 freeº¯Êý

ÔÚ¶ÑÉÏ·ÖÅäµÄ¶îÄڴ棬ÐèÒªÓÃfreeº¯ÊýÏÔʾÊÍ·Å£¬º¯ÊýÔ­ÐÍÈçÏ£º

ʹÓÃfree(),Ò²ÓÐÏÂÃæ¼¸µãҪעÒ⣺

1£©±ØÐëÌṩÄÚ´æµÄÆðʼµØÖ·£»

µ÷Óøú¯Êýʱ£¬±ØÐëÌṩÄÚ´æµÄÆðʼµØÖ·£¬²»Äܹ»Ìṩ²¿·ÖµØÖ·£¬ÊÍ·ÅÄÚ´æÖеÄÒ»²¿·ÖÊDz»ÔÊÐíµÄ¡£

2£©mallocºÍfreeÅä¶ÔʹÓã»

±àÒëÆ÷²»¸ºÔð¶¯Ì¬ÄÚ´æµÄÊÍ·Å£¬ÐèÒª³ÌÐòÔ±ÏÔʾÊÍ·Å¡£Òò´Ë£¬mallocÓëfreeÊÇÅä¶ÔʹÓõ쬱ÜÃâÄÚ´æÐ¹Â©¡£

p = NULLÊDZØÐëµÄ£¬ÒòΪËäÈ»Õâ¿éÄÚ´æ±»ÊÍ·ÅÁË£¬µ«ÊÇpÈÔÖ¸ÏòÕâ¿éÄڴ棬±ÜÃâÏ´ζÔpµÄÎó²Ù×÷£»

3£©²»ÔÊÐíÖØ¸´ÊÍ·Å

ÒòΪÕâ¿éÄÚ´æ±»Êͷź󣬿ÉÄÜÒÑÁí·ÖÅ䣬Õâ¿éÇøÓò±»±ðÈËÕ¼Óã¬Èç¹ûÔÙ´ÎÊÍ·Å£¬»áÔì³ÉÊý¾Ý¶ªÊ§£»

1.2.3 ÆäËüÏà¹Øº¯Êý

callocº¯Êý·ÖÅäÄÚ´æÐèÒª¿¼ÂǴ洢λÖõÄÀàÐÍ¡£

reallocº¯Êý¿ÉÒÔµ÷ÕûÒ»¶Î¶¯Ì¬·ÖÅäÄÚ´æµÄ´óС

1.3¶ÑºÍÕ»±È½Ï

1£©ÉêÇ뷽ʽ

stack: ÓÉϵͳ×Ô¶¯·ÖÅä¡£ ÀýÈ磬ÉùÃ÷ÔÚº¯ÊýÖÐÒ»¸ö¾Ö²¿±äÁ¿ int b; ϵͳ×Ô¶¯ÔÚÕ»ÖÐΪb¿ª±Ù¿Õ¼ä

heap: ÐèÒª³ÌÐòÔ±×Ô¼ºÉêÇ룬²¢Ö¸Ã÷´óС£¬ÔÚcÖÐmallocº¯Êý ,Èçp1 = (char *)malloc(10);

2£©ÉêÇëºóϵͳµÄÏìÓ¦

Õ»£ºÖ»ÒªÕ»µÄÊ£Óà¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼ä£¬ÏµÍ³½«Îª³ÌÐòÌṩÄڴ棬·ñÔò½«±¨Òì³£ÌáʾջÒç³ö¡£

¶Ñ£ºÊ×ÏÈÓ¦¸ÃÖªµÀ²Ù×÷ϵͳÓÐÒ»¸ö¼Ç¼¿ÕÏÐÄÚ´æµØÖ·µÄÁ´±í£¬µ±ÏµÍ³ÊÕµ½³ÌÐòµÄÉêÇëʱ£¬»á±éÀú¸ÃÁ´±í£¬Ñ°ÕÒµÚÒ»¸ö¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼äµÄ¶Ñ½áµã£¬È»ºó½«¸Ã½áµã´Ó¿ÕÏнáµãÁ´±íÖÐɾ³ý£¬²¢½«¸Ã½áµãµÄ¿Õ¼ä·ÖÅ䏸³ÌÐò£¬ÁíÍ⣬¶ÔÓÚ´ó¶àÊýϵͳ£¬»áÔÚÕâ¿éÄÚ´æ¿Õ¼äÖеÄÊ×µØÖ·´¦¼Ç¼±¾´Î·ÖÅäµÄ´óС£¬ÕâÑù£¬´úÂëÖеÄdeleteÓï¾ä²ÅÄÜÕýÈ·µÄÊͷű¾ÄÚ´æ¿Õ¼ä¡£ÁíÍ⣬ÓÉÓÚÕÒµ½µÄ¶Ñ½áµãµÄ´óС²»Ò»¶¨ÕýºÃµÈÓÚÉêÇëµÄ´óС£¬ÏµÍ³»á×Ô¶¯µÄ½«¶àÓàµÄÄDz¿·ÖÖØÐ·ÅÈë¿ÕÏÐÁ´±íÖС£

3£©ÉêÇë´óСµÄÏÞÖÆ

Õ»£ºÕ»ÊÇÏòµÍµØÖ·À©Õ¹µÄÊý¾Ý½á¹¹£¬ÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æµÄÇøÓò¡£Õâ¾ä»°µÄÒâ˼ÊÇÕ»¶¥µÄµØÖ·ºÍÕ»µÄ×î´óÈÝÁ¿ÊÇϵͳԤÏȹ涨ºÃµÄ£¬Õ»µÄ´óСÊÇ2M£¨Ò²ÓеÄ˵ÊÇ1M£¬×ÜÖ®ÊÇÒ»¸ö±àÒëʱ¾ÍÈ·¶¨µÄ³£Êý£©£¬Èç¹ûÉêÇëµÄ¿Õ¼ä³¬¹ýÕ»µÄÊ£Óà¿Õ¼äʱ£¬½«Ìáʾoverflow¡£Òò´Ë£¬ÄÜ´ÓÕ»»ñµÃµÄ¿Õ¼ä½ÏС¡£

¶Ñ£º¶ÑÊÇÏò¸ßµØÖ·À©Õ¹µÄÊý¾Ý½á¹¹£¬ÊDz»Á¬ÐøµÄÄÚ´æÇøÓò¡£ÕâÊÇÓÉÓÚϵͳÊÇÓÃÁ´±íÀ´´æ´¢µÄ¿ÕÏÐÄÚ´æµØÖ·µÄ£¬×ÔÈ»ÊDz»Á¬ÐøµÄ£¬¶øÁ´±íµÄ±éÀú·½ÏòÊÇÓɵ͵ØÖ·Ïò¸ßµØÖ·¡£¶ÑµÄ´óСÊÜÏÞÓÚ¼ÆËã»úϵͳÖÐÓÐЧµÄÐéÄâÄÚ´æ¡£Óɴ˿ɼû£¬¶Ñ»ñµÃµÄ¿Õ¼ä±È½ÏÁé»î£¬Ò²±È½Ï´ó¡£

4£©ÉêÇëЧÂʵıȽÏ

Õ»ÓÉϵͳ×Ô¶¯·ÖÅ䣬ËٶȽϿ졣µ«³ÌÐòÔ±ÊÇÎÞ·¨¿ØÖƵġ£

¶ÑÊÇÓÉnew·ÖÅäµÄÄڴ棬һ°ãËٶȱȽÏÂý£¬¶øÇÒÈÝÒײúÉúÄÚ´æË鯬,²»¹ýÓÃÆðÀ´×î·½±ã¡£

5£©¶ÑºÍÕ»ÖеĴ洢ÄÚÈÝ

Õ»£ºÔÚº¯Êýµ÷ÓÃʱ£¬µÚÒ»¸ö½øÕ»µÄÊÇÖ÷º¯ÊýÖкóµÄÏÂÒ»ÌõÖ¸Áº¯Êýµ÷ÓÃÓï¾äµÄÏÂÒ»Ìõ¿ÉÖ´ÐÐÓï¾ä£©µÄµØÖ·£¬È»ºóÊǺ¯ÊýµÄ¸÷¸ö²ÎÊý£¬ÔÚ´ó¶àÊýµÄC±àÒëÆ÷ÖУ¬²ÎÊýÊÇÓÉÓÒÍù×óÈëÕ»µÄ£¬È»ºóÊǺ¯ÊýÖеľֲ¿±äÁ¿¡£×¢Ò⾲̬±äÁ¿ÊDz»ÈëÕ»µÄ¡£ µ±±¾´Îº¯Êýµ÷ÓýáÊøºó£¬¾Ö²¿±äÁ¿ÏȳöÕ»£¬È»ºóÊDzÎÊý£¬×îºóÕ»¶¥Ö¸ÕëÖ¸Ïò×ʼ´æµÄµØÖ·£¬Ò²¾ÍÊÇÖ÷º¯ÊýÖеÄÏÂÒ»ÌõÖ¸Á³ÌÐòÓɸõã¼ÌÐøÔËÐС£

¶Ñ£ºÒ»°ãÊÇÔڶѵÄÍ·²¿ÓÃÒ»¸ö×Ö½Ú´æ·Å¶ÑµÄ´óС¡£¶ÑÖеľßÌåÄÚÈÝÓɳÌÐòÔ±°²ÅÅ¡£

6£©´æÈ¡Ð§ÂʵıȽÏ

char s1[] = "aaaaaaaaaaaaaaa";

char *s2 = "bbbbbbbbbbbbbbbbb";

aaaaaaaaaaaÊÇÔÚÔËÐÐʱ¿Ì¸³ÖµµÄ£»

¶øbbbbbbbbbbbÊÇÔÚ±àÒëʱ¾ÍÈ·¶¨µÄ£»

µ«ÊÇ£¬ÔÚÒÔºóµÄ´æÈ¡ÖУ¬ÔÚÕ»ÉϵÄÊý×é±ÈÖ¸ÕëËùÖ¸ÏòµÄ×Ö·û´®(ÀýÈç¶Ñ)¿ì¡£

±ÈÈ磺

¶ÔÓ¦µÄ»ã±à´úÂë

µÚÒ»ÖÖÔÚ¶Áȡʱֱ½Ó¾Í°Ñ×Ö·û´®ÖеÄÔªËØ¶Áµ½¼Ä´æÆ÷clÖУ¬¶øµÚ¶þÖÖÔòÒªÏȰÑÖ¸ÕëÖµ¶Áµ½edxÖУ¬ÔÙ¸ù¾Ýedx¶ÁÈ¡×Ö·û£¬ÏÔÈ»ÂýÁË¡£

7£©×îºó×ܽá

¶ÑºÍÕ»µÄÇø±ð¿ÉÒÔÓÃÈçϵıÈÓ÷À´¿´³ö£º

Õ»¾ÍÏñÎÒÃÇÈ¥·¹¹ÝÀï³Ô·¹£¬Ö»¹Üµã²Ë£¨·¢³öÉêÇ룩¡¢¸¶Ç®¡¢ºÍ³Ô£¨Ê¹Óã©£¬³Ô±¥Á˾Í×ߣ¬²»±ØÀí»áÇвˡ¢Ï´²ËµÈ×¼±¸¹¤×÷ºÍÏ´Í롢ˢ¹øµÈɨβ¹¤×÷£¬ËûµÄºÃ´¦ÊÇ¿ì½Ý£¬µ«ÊÇ×ÔÓɶÈС¡£

¶Ñ¾ÍÏóÊÇ×Ô¼º¶¯ÊÖ×öϲ»¶³ÔµÄ²ËëÈ£¬±È½ÏÂé·³£¬µ«ÊDZȽϷûºÏ×Ô¼ºµÄ¿Ú棬¶øÇÒ×ÔÓɶȴó¡£

2¡¢ÄÚ´æ¶ÔÆë

2.1 #pragma pack(n) ¶ÔÆëÓ÷¨Ïê½â

1.ʲôÊÇ¶ÔÆë£¬ÒÔ¼°ÎªÊ²Ã´Òª¶ÔÆë

ÏÖ´ú¼ÆËã»úÖÐÄÚ´æ¿Õ¼ä¶¼Êǰ´ÕÕbyte»®·ÖµÄ£¬´ÓÀíÂÛÉϽ²Ëƺõ¶ÔÈκÎÀàÐ͵ıäÁ¿µÄ·ÃÎÊ¿ÉÒÔ´ÓÈκεØÖ·¿ªÊ¼£¬µ«Êµ¼ÊÇé¿öÊÇÔÚ·ÃÎÊÌØ¶¨±äÁ¿µÄʱºò¾­³£ÔÚÌØ¶¨µÄÄÚ´æµØÖ··ÃÎÊ£¬Õâ¾ÍÐèÒª¸÷ÀàÐÍÊý¾Ý°´ÕÕÒ»¶¨µÄ¹æÔòÔÚ¿Õ¼äÉÏÅÅÁУ¬¶ø²»ÊÇ˳ÐòµÄÒ»¸ö½ÓÒ»¸öµÄÅÅ·Å£¬Õâ¾ÍÊÇ¶ÔÆë¡£

¶ÔÆëµÄ×÷ÓúÍÔ­Òò£º¸÷¸öÓ²¼þƽ̨¶Ô´æ´¢¿Õ¼äµÄ´¦ÀíÉÏÓкܴóµÄ²»Í¬¡£Ò»Ð©Æ½Ì¨¶ÔÄ³Ð©ÌØ¶¨ÀàÐ͵ÄÊý¾ÝÖ»ÄÜ´ÓÄ³Ð©ÌØ¶¨µØÖ·¿ªÊ¼´æÈ¡¡£ÆäËûƽ̨¿ÉÄÜûÓÐÕâÖÖÇé¿ö£¬ µ«ÊÇ×î³£¼ûµÄÊÇÈç¹û²»°´ÕÕÊÊºÏÆäÆ½Ì¨ÒªÇó¶ÔÊý¾Ý´æ·Å½øÐÐ¶ÔÆë£¬»áÔÚ´æÈ¡Ð§ÂÊÉÏ´øÀ´Ëðʧ¡£±ÈÈçÓÐЩƽ̨ÿ´Î¶Á¶¼ÊÇ´ÓżµØÖ·¿ªÊ¼£¬Èç¹ûÒ»¸öintÐÍ£¨¼ÙÉèΪ 32λϵͳ£©Èç¹û´æ·ÅÔÚżµØÖ·¿ªÊ¼µÄµØ·½£¬ÄÇôһ¸ö¶ÁÖÜÆÚ¾Í¿ÉÒÔ¶Á³ö£¬¶øÈç¹û´æ·ÅÔÚÆæµØÖ·¿ªÊ¼µÄµØ·½£¬¾Í¿ÉÄÜ»áÐèÒª2¸ö¶ÁÖÜÆÚ£¬²¢¶ÔÁ½´Î¶Á³öµÄ½á¹ûµÄ¸ßµÍ×Ö½Ú½øÐÐÆ´´Õ²ÅÄܵõ½¸ÃintÊý¾Ý¡£ÏÔÈ»ÔÚ¶ÁȡЧÂÊÉÏϽµºÜ¶à¡£ÕâÒ²ÊǿռäºÍʱ¼äµÄ²©ÞÄ¡£

2.¶ÔÆëµÄʵÏÖ

ͨ³££¬ÎÒÃÇд³ÌÐòµÄʱºò£¬²»ÐèÒª¿¼ÂÇ¶ÔÆëÎÊÌâ¡£±àÒëÆ÷»áÌæÎÒÃÇÑ¡ÔñʱºòÄ¿±êƽ̨µÄ¶ÔÆë²ßÂÔ¡£µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔ֪ͨ¸ø±àÒëÆ÷´«µÝÔ¤±àÒëÖ¸Áî¶ø¸Ä±ä¶ÔÖ¸¶¨Êý¾ÝµÄ¶ÔÆë·½·¨¡£ µ«ÊÇ£¬ÕýÒòΪÎÒÃÇÒ»°ã²»ÐèÒª¹ØÐÄÕâ¸öÎÊÌ⣬ËùÒÔÒòΪ±à¼­Æ÷¶ÔÊý¾Ý´æ·Å×öÁË¶ÔÆë£¬¶øÎÒÃDz»Á˽âµÄ»°£¬³£³£»á¶ÔһЩÎÊÌâ¸Ðµ½ÃÔ»ó¡£×î³£¼ûµÄ¾ÍÊÇstructÊý¾Ý½á¹¹µÄsizeof½á¹û£¬³öºõÒâÁÏ¡£Îª´Ë£¬ÎÒÃÇÐèÒª¶Ô¶ÔÆëËã·¨ËùÁ˽⡣

×÷Óãº

Ö¸¶¨½á¹¹Ìå¡¢ÁªºÏÒÔ¼°Àà³ÉÔ±µÄpacking alignment;

Óï·¨£º

#pragma pack( [show] | [push | pop] [, identifier], n )

˵Ã÷£º

1>packÌṩÊý¾ÝÉùÃ÷¼¶±ðµÄ¿ØÖÆ£¬¶Ô¶¨Òå²»Æð×÷Óã»

2>µ÷ÓÃpackʱ²»Ö¸¶¨²ÎÊý£¬n½«±»Éè³ÉĬÈÏÖµ£»

3>Ò»µ©¸Ä±äÊý¾ÝÀàÐ͵Äalignment£¬Ö±½ÓЧ¹û¾ÍÊÇÕ¼ÓÃmemoryµÄ¼õÉÙ£¬µ«ÊÇperformance»áϽµ£»

3.Óï·¨¾ßÌå·ÖÎö

1>show£º¿ÉÑ¡²ÎÊý£»ÏÔʾµ±Ç°packing aligmentµÄ×Ö½ÚÊý£¬ÒÔwarning messageµÄÐÎʽ±»ÏÔʾ£»

2>push£º¿ÉÑ¡²ÎÊý£»½«µ±Ç°Ö¸¶¨µÄpacking alignmentÊýÖµ½øÐÐѹջ²Ù×÷£¬ÕâÀïµÄÕ»ÊÇthe internal compiler stack£¬Í¬Ê±ÉèÖõ±Ç°µÄpacking alignmentΪn£»Èç¹ûnûÓÐÖ¸¶¨£¬Ôò½«µ±Ç°µÄpacking alignmentÊýֵѹջ£»

3>pop£º¿ÉÑ¡²ÎÊý£»´Óinternal compiler stackÖÐɾ³ý×î¶¥¶ËµÄrecord£»Èç¹ûûÓÐÖ¸¶¨n£¬Ôòµ±Ç°Õ»¶¥record¼´ÎªÐµÄpacking alignmentÊýÖµ£»Èç¹ûÖ¸¶¨ÁËn£¬Ôòn½«³ÉΪеÄpacking aligmentÊýÖµ£»Èç¹ûÖ¸¶¨ÁËidentifier£¬Ôòinternal compiler stackÖеÄrecord¶¼½«±»popÖ±µ½identifier±»ÕÒµ½£¬È»ºópop³öidentitier£¬Í¬Ê±ÉèÖÃpacking alignmentÊýֵΪµ±Ç°Õ»¶¥µÄrecord£»Èç¹ûÖ¸¶¨µÄidentifier²¢²»´æÔÚÓÚinternal compiler stack£¬Ôòpop²Ù×÷±»ºöÂÔ£»

4>identifier£º¿ÉÑ¡²ÎÊý£»µ±Í¬pushÒ»ÆðʹÓÃʱ£¬¸³Ó赱ǰ±»Ñ¹ÈëÕ»ÖеÄrecordÒ»¸öÃû³Æ£»µ±Í¬popÒ»ÆðʹÓÃʱ£¬´Óinternal compiler stackÖÐpop³öËùÓеÄrecordÖ±µ½identifier±»pop³ö£¬Èç¹ûidentifierûÓб»ÕÒµ½£¬ÔòºöÂÔpop²Ù×÷£»

5>n£º¿ÉÑ¡²ÎÊý£»Ö¸¶¨packingµÄÊýÖµ£¬ÒÔ×Ö½ÚΪµ¥Î»£»È±Ê¡ÊýÖµÊÇ8£¬ºÏ·¨µÄÊýÖµ·Ö±ðÊÇ1¡¢2¡¢4¡¢8¡¢16¡£

4.ÖØÒª¹æÔò

1>¸´ÔÓÀàÐÍÖи÷¸ö³ÉÔ±°´ÕÕËüÃDZ»ÉùÃ÷µÄ˳ÐòÔÚÄÚ´æÖÐ˳Ðò´æ´¢£¬µÚÒ»¸ö³ÉÔ±µÄµØÖ·ºÍÕû¸öÀàÐ͵ĵØÖ·Ïàͬ£»

2>ÿ¸ö³ÉÔ±·Ö±ð¶ÔÆë£¬¼´Ã¿¸ö³ÉÔ±°´×Ô¼ºµÄ·½Ê½¶ÔÆë£¬²¢×îС»¯³¤¶È£»¹æÔò¾ÍÊÇÿ¸ö³ÉÔ±°´ÆäÀàÐÍµÄ¶ÔÆë²ÎÊý£¨Í¨³£ÊÇÕâ¸öÀàÐ͵ĴóС£©ºÍÖ¸¶¨¶ÔÆë²ÎÊýÖнÏСµÄÒ»¸ö¶ÔÆë£»

3>½á¹¹¡¢ÁªºÏ»òÕßÀàµÄÊý¾Ý³ÉÔ±£¬µÚÒ»¸ö·ÅÔÚÆ«ÒÆÎª0µÄµØ·½£»ÒÔºóÿ¸öÊý¾Ý³ÉÔ±µÄ¶ÔÆë£¬°´ÕÕ#pragma packÖ¸¶¨µÄÊýÖµºÍÕâ¸öÊý¾Ý³ÉÔ±×ÔÉí³¤¶ÈÁ½¸öÖбȽÏСµÄÄǸö½øÐУ»Ò²¾ÍÊÇ˵£¬µ±#pragma packÖ¸¶¨µÄÖµµÈÓÚ»òÕß³¬¹ýËùÓÐÊý¾Ý³ÉÔ±³¤¶ÈµÄʱºò£¬Õâ¸öÖ¸¶¨ÖµµÄ´óС½«²»²úÉúÈκÎЧ¹û;

4>¸´ÔÓÀàÐÍ£¨Èç½á¹¹£©ÕûÌåµÄ¶ÔÆë<×¢ÒâÊÇ¡°ÕûÌ塱>Êǰ´ÕսṹÌåÖ㤶È×î´óµÄÊý¾Ý³ÉÔ±ºÍ#pragma packÖ¸¶¨ÖµÖ®¼ä½ÏСµÄÄǸöÖµ½øÐУ»ÕâÑùÔÚ³ÉÔ±ÊǸ´ÔÓÀàÐÍʱ£¬¿ÉÒÔ×îС»¯³¤¶È£»

5>½á¹¹ÕûÌ峤¶ÈµÄ¼ÆËã±ØÐëÈ¡ËùÓùýµÄËùÓÐ¶ÔÆë²ÎÊýµÄÕûÊý±¶£¬²»¹»²¹¿Õ×Ö½Ú£»Ò²¾ÍÊÇÈ¡ËùÓùýµÄËùÓÐ¶ÔÆë²ÎÊýÖÐ×î´óµÄÄǸöÖµµÄÕûÊý±¶£¬ÒòΪ¶ÔÆë²ÎÊý¶¼ÊÇ2µÄn´Î·½£»ÕâÑùÔÚ´¦ÀíÊý×éʱ¿ÉÒÔ±£Ö¤Ã¿Ò»Ïî¶¼±ß½ç¶ÔÆë£»

5.¶ÔÆëµÄËã·¨

ÓÉÓÚ¸÷¸öƽ̨ºÍ±àÒëÆ÷µÄ²»Í¬£¬ÏÖÒÔ±¾ÈËʹÓõÄgcc version 3.2.2±àÒëÆ÷£¨32λx86ƽ̨£©ÎªÀý×Ó£¬À´ÌÖÂÛ±àÒëÆ÷¶ÔstructÊý¾Ý½á¹¹Öеĸ÷³ÉÔ±ÈçºÎ½øÐÐ¶ÔÆëµÄ¡£

ÔÚÏàͬµÄ¶ÔÆë·½Ê½Ï£¬½á¹¹ÌåÄÚ²¿Êý¾Ý¶¨ÒåµÄ˳Ðò²»Í¬£¬½á¹¹ÌåÕûÌåÕ¼¾ÝÄÚ´æ¿Õ¼äÒ²²»Í¬£¬ÈçÏ£º

Éè½á¹¹ÌåÈç϶¨Ò壺

½á¹¹ÌåAÖаüº¬ÁË4×Ö½Ú³¤¶ÈµÄintÒ»¸ö£¬1×Ö½Ú³¤¶ÈµÄcharÒ»¸öºÍ2×Ö½Ú³¤¶ÈµÄshortÐÍÊý¾ÝÒ»¸ö¡£ËùÒÔAÓõ½µÄ¿Õ¼äÓ¦¸ÃÊÇ7×Ö½Ú¡£µ«ÊÇÒòΪ±àÒëÆ÷Òª¶ÔÊý¾Ý³ÉÔ±ÔÚ¿Õ¼äÉϽøÐÐ¶ÔÆë¡£ËùÒÔʹÓÃsizeof(strcut A)ֵΪ8¡£

ÏÖÔڰѸýṹÌåµ÷Õû³ÉÔ±±äÁ¿µÄ˳Ðò¡£

ÕâʱºòͬÑùÊÇ×ܹ²7¸ö×ֽڵıäÁ¿£¬µ«ÊÇsizeof(struct B)µÄֵȴÊÇ12¡£

ÏÂÃæÎÒÃÇʹÓÃÔ¤±àÒëÖ¸Áî#progma pack (value)À´¸æËß±àÒëÆ÷£¬Ê¹ÓÃÎÒÃÇÖ¸¶¨µÄ¶ÔÆëÖµÀ´È¡´úȱʡµÄ¡£

sizeof(struct C)ÖµÊÇ8¡£

ÐÞ¸Ä¶ÔÆëֵΪ1£º

sizeof(struct D)ֵΪ7¡£

¶ÔÓÚcharÐÍÊý¾Ý£¬Æä×ÔÉí¶ÔÆëֵΪ1£¬¶ÔÓÚshortÐÍΪ2£¬¶ÔÓÚint,float,doubleÀàÐÍ£¬Æä×ÔÉí¶ÔÆëֵΪ4£¬µ¥Î»×Ö½Ú¡£

6.Ëĸö¸ÅÄîÖµ

1>Êý¾ÝÀàÐÍ×ÔÉíµÄ¶ÔÆëÖµ£º¾ÍÊÇÉÏÃæ½»´úµÄ»ù±¾Êý¾ÝÀàÐ͵Ä×ÔÉí¶ÔÆëÖµ¡£

2>Ö¸¶¨¶ÔÆëÖµ£º#progma pack (value)ʱµÄÖ¸¶¨¶ÔÆëÖµvalue¡£

3>½á¹¹Ìå»òÕßÀàµÄ×ÔÉí¶ÔÆëÖµ£ºÆäÊý¾Ý³ÉÔ±ÖÐ×ÔÉí¶ÔÆëÖµ×î´óµÄÄǸöÖµ¡£

4>Êý¾Ý³ÉÔ±¡¢½á¹¹ÌåºÍÀàµÄÓÐЧ¶ÔÆëÖµ£º×ÔÉí¶ÔÆëÖµºÍÖ¸¶¨¶ÔÆëÖµÖÐСµÄÄǸöÖµ¡£ ÓÐÁËÕâЩֵ£¬ÎÒÃǾͿÉÒԺܷ½±ãµÄÀ´ÌÖÂÛ¾ßÌåÊý¾Ý½á¹¹µÄ³ÉÔ±ºÍÆä×ÔÉíµÄ¶ÔÆë·½Ê½¡£ÓÐЧ¶ÔÆëÖµNÊÇ×îÖÕÓÃÀ´¾ö¶¨Êý¾Ý´æ·ÅµØÖ··½Ê½µÄÖµ£¬×îÖØÒª¡£ÓÐЧ¶ÔÆëN£¬¾ÍÊDZíʾ¡°¶ÔÆëÔÚNÉÏ¡±£¬Ò²¾ÍÊÇ˵¸ÃÊý¾ÝµÄ¡±´æ·ÅÆðʼµØÖ·%N=0¡±. ¶øÊý¾Ý½á¹¹ÖеÄÊý¾Ý±äÁ¿¶¼Êǰ´¶¨ÒåµÄÏȺó˳ÐòÀ´Åŷŵġ£µÚÒ»¸öÊý¾Ý±äÁ¿µÄÆðʼµØÖ·¾ÍÊÇÊý¾Ý½á¹¹µÄÆðʼµØÖ·¡£½á¹¹ÌåµÄ³ÉÔ±±äÁ¿Òª¶ÔÆëÅÅ·Å£¬½á¹¹Ìå±¾ÉíÒ²Òª¸ù ¾Ý×ÔÉíµÄÓÐЧ¶ÔÆëÖµÔ²Õû(¾ÍÊǽṹÌå³ÉÔ±±äÁ¿Õ¼ÓÃ×ܳ¤¶ÈÐèÒªÊǶԽṹÌåÓÐЧ¶ÔÆëÖµµÄÕûÊý±¶£¬½áºÏÏÂÃæÀý×ÓÀí½â)¡£ÕâÑù¾Í²»ÄÜÀí½âÉÏÃæµÄ¼¸¸öÀý×ÓµÄÖµÁË¡£

Àý×Ó·ÖÎö£º

·ÖÎöÀý×ÓB£»

¼ÙÉèB´ÓµØÖ·¿Õ¼ä0x0000¿ªÊ¼ÅÅ·Å¡£¸ÃÀý×ÓÖÐûÓж¨ÒåÖ¸¶¨¶ÔÆëÖµ£¬ÔÚ±ÊÕß»·¾³Ï£¬¸ÃֵĬÈÏΪ4¡£

µÚÒ»¸ö³ÉÔ±±äÁ¿bµÄ×ÔÉí¶ÔÆëÖµÊÇ1£¬±ÈÖ¸¶¨»òÕßĬÈÏÖ¸¶¨¶ÔÆëÖµ4С£¬ËùÒÔÆäÓÐЧ¶ÔÆëֵΪ1£¬ËùÒÔÆä´æ·ÅµØÖ·0x0000·ûºÏ0x0000%1=0.

µÚ¶þ¸ö³ÉÔ±±äÁ¿a£¬Æä×ÔÉí¶ÔÆëֵΪ4£¬ËùÒÔÓÐЧ¶ÔÆëֵҲΪ4£¬ËùÒÔÖ»ÄÜ´æ·ÅÔÚÆðʼµØÖ·Îª0x0004µ½0x0007ÕâËĸöÁ¬ÐøµÄ×Ö½Ú¿Õ¼äÖУ¬·ûºÏ0x0004%4=0, ÇÒ½ô¿¿µÚÒ»¸ö±äÁ¿¡£

µÚÈý¸ö±äÁ¿c,×ÔÉí¶ÔÆëֵΪ2£¬ËùÒÔÓÐЧ¶ÔÆëÖµÒ²ÊÇ2£¬¿ÉÒÔ´æ·ÅÔÚ0x0008µ½0x0009 ÕâÁ½¸ö×Ö½Ú¿Õ¼äÖУ¬·ûºÏ0x0008%2=0¡£ËùÒÔ´Ó0x0000µ½0x0009´æ·ÅµÄ¶¼ÊÇBÄÚÈÝ¡£ÔÙ¿´Êý¾Ý½á¹¹BµÄ×ÔÉí¶ÔÆëֵΪÆä±äÁ¿ÖÐ×î´ó¶ÔÆëÖµ(ÕâÀïÊÇb£©ËùÒÔ¾ÍÊÇ4£¬ËùÒԽṹÌåµÄÓÐЧ¶ÔÆëÖµÒ²ÊÇ4¡£¸ù¾Ý½á¹¹ÌåÔ²ÕûµÄÒªÇó£¬0x0009µ½0x0000=10×Ö½Ú£¬£¨10£«2£©£¥4£½0¡£ËùÒÔ0x0000Aµ½0x000BҲΪ½á¹¹ÌåBËùÕ¼Ó᣹ÊB´Ó0x0000µ½0x000B¹²ÓÐ12¸ö×Ö½Ú,sizeof(struct B)=12;

ͬÀí,·ÖÎöÉÏÃæÀý×ÓC£º

µÚÒ»¸ö±äÁ¿bµÄ×ÔÉí¶ÔÆëֵΪ1£¬Ö¸¶¨¶ÔÆëֵΪ2£¬ËùÒÔ£¬ÆäÓÐЧ¶ÔÆëֵΪ1£¬¼ÙÉèC´Ó0x0000¿ªÊ¼£¬ÄÇôb´æ·ÅÔÚ0x0000£¬·ûºÏ0x0000%1=0;

µÚ¶þ¸ö±äÁ¿£¬×ÔÉí¶ÔÆëֵΪ4£¬Ö¸¶¨¶ÔÆëֵΪ2£¬ËùÒÔÓÐЧ¶ÔÆëֵΪ2£¬ËùÒÔ˳Ðò´æ·ÅÔÚ0x0002¡¢0x0003¡¢0x0004¡¢0x0005ËĸöÁ¬Ðø×Ö½ÚÖУ¬·ûºÏ0x0002%2=0¡£

µÚÈý¸ö±äÁ¿cµÄ×ÔÉí¶ÔÆëֵΪ2£¬ËùÒÔÓÐЧ¶ÔÆëֵΪ2£¬Ë³Ðò´æ·ÅÔÚ0x0006¡¢0x0007ÖУ¬·ûºÏ0x0006%2=0¡£ËùÒÔ´Ó0x0000µ½0x00007¹²°Ë×Ö½Ú´æ·ÅµÄÊÇCµÄ±äÁ¿¡£

ÓÖCµÄ×ÔÉí¶ÔÆëֵΪ4£¬ËùÒÔCµÄÓÐЧ¶ÔÆëֵΪ2¡£ÓÖ8%2=0,CÖ»Õ¼ÓÃ0x0000µ½0x0007µÄ°Ë¸ö×Ö½Ú¡£ËùÒÔsizeof(struct C)=8.

9.2.2×Ö½Ú¶ÔÆë¶Ô³ÌÐòµÄÓ°Ïì

ÏÈÈÃÎÒÃÇ¿´¼¸¸öÀý×Ó°É(32bit,x86»·¾³,gcc±àÒëÆ÷):

Éè½á¹¹ÌåÈç϶¨Ò壺

ÏÖÔÚÒÑÖª32λ»úÆ÷Éϸ÷ÖÖÊý¾ÝÀàÐ͵ij¤¶ÈÈçÏÂ:

char:1(ÓзûºÅÎÞ·ûºÅͬ)

short:2(ÓзûºÅÎÞ·ûºÅͬ)

int:4(ÓзûºÅÎÞ·ûºÅͬ)

long:4(ÓзûºÅÎÞ·ûºÅͬ)

float:4 double:8

ÄÇôÉÏÃæÁ½¸ö½á¹¹´óСÈçºÎÄØ?

½á¹ûÊÇ:

sizeof(strcut A)ֵΪ8

sizeof(struct B)µÄֵȴÊÇ12

½á¹¹ÌåAÖаüº¬ÁË4×Ö½Ú³¤¶ÈµÄintÒ»¸ö£¬1×Ö½Ú³¤¶ÈµÄcharÒ»¸öºÍ2×Ö½Ú³¤¶ÈµÄshortÐÍÊý¾ÝÒ»¸ö,BÒ²Ò»Ñù;°´Àí˵A,B´óСӦ¸Ã¶¼ÊÇ7×Ö½Ú¡£Ö®ËùÒÔ³öÏÖÉÏÃæµÄ½á¹ûÊÇÒòΪ±àÒëÆ÷Òª¶ÔÊý¾Ý³ÉÔ±ÔÚ¿Õ¼äÉϽøÐÐ¶ÔÆë¡£ÉÏÃæÊǰ´ÕÕ±àÒëÆ÷µÄĬÈÏÉèÖýøÐÐ¶ÔÆëµÄ½á¹û,ÄÇôÎÒÃÇÊDz»ÊÇ¿ÉÒԸıä±àÒëÆ÷µÄÕâÖÖĬÈÏ¶ÔÆëÉèÖÃÄØ,µ±È»¿ÉÒÔ.ÀýÈç:

sizeof(struct C)ÖµÊÇ8¡£

ÐÞ¸Ä¶ÔÆëֵΪ1£º

sizeof(struct D)ֵΪ7¡£

ºóÃæÎÒÃÇÔÙ½²½â#pragma pack()µÄ×÷ÓÃ.

2.3Ð޸ıàÒëÆ÷µÄĬÈÏ¶ÔÆëÖµ

1>ÔÚVC IDEÖУ¬¿ÉÒÔÕâÑùÐ޸ģº[Project]|[Settings],c/c++Ñ¡ÏCategoryµÄCode GenerationÑ¡ÏîµÄStruct Member AlignmentÖÐÐ޸ģ¬Ä¬ÈÏÊÇ8×Ö½Ú¡£

2>ÔÚ±àÂëʱ£¬¿ÉÒÔÕâÑù¶¯Ì¬Ð޸ģº#pragma pack .×¢Òâ:ÊÇpragma¶ø²»ÊÇprogma.

Èç¹ûÔÚ±à³ÌµÄʱºòÒª¿¼ÂǽÚÔ¼¿Õ¼äµÄ»°,ÄÇôÎÒÃÇÖ»ÐèÒª¼Ù¶¨½á¹¹µÄÊ×µØÖ·ÊÇ0,È»ºó¸÷¸ö±äÁ¿°´ÕÕÉÏÃæµÄÔ­Ôò½øÐÐÅÅÁм´¿É,»ù±¾µÄÔ­Ôò¾ÍÊǰѽṹÖеıäÁ¿°´ÕÕ ÀàÐÍ´óС´ÓСµ½´óÉùÃ÷,¾¡Á¿¼õÉÙÖмäµÄÌî²¹¿Õ¼ä.»¹ÓÐÒ»ÖÖ¾ÍÊÇΪÁËÒԿռ任ȡʱ¼äµÄЧÂÊ,ÎÒÃÇÏÔʾµÄ½øÐÐÌî²¹¿Õ¼ä½øÐÐ¶ÔÆë,±ÈÈç:ÓÐÒ»ÖÖʹÓÿռ任ʱ¼ä×ö ·¨ÊÇÏÔʽµÄ²åÈëreserved³ÉÔ±£º

reserved³ÉÔ±¶ÔÎÒÃǵijÌÐòûÓÐʲôÒâÒå,ËüÖ»ÊÇÆðµ½Ìî²¹¿Õ¼äÒÔ´ïµ½×Ö½Ú¶ÔÆëµÄÄ¿µÄ,µ±È»¼´Ê¹²»¼ÓÕâ¸ö³ÉԱͨ³£±àÒëÆ÷Ò²»á¸øÎÒÃÇ×Ô¶¯Ìî²¹¶ÔÆë,ÎÒÃÇ×Ô¼º¼ÓÉÏËüÖ»ÊÇÆðµ½ÏÔʽµÄÌáÐÑ×÷ÓÃ.

2.4×Ö½Ú¶ÔÆë¿ÉÄÜ´øÀ´µÄÒþ»¼

´úÂëÖйØÓÚ¶ÔÆëµÄÒþ»¼£¬ºÜ¶àÊÇÒþʽµÄ¡£±ÈÈçÔÚÇ¿ÖÆÀàÐÍת»»µÄʱºò¡£ÀýÈç:

×îºóÁ½¾ä´úÂ룬´ÓÆæÊý±ß½çÈ¥·ÃÎÊunsignedshortÐͱäÁ¿£¬ÏÔÈ»²»·ûºÏ¶ÔÆëµÄ¹æ¶¨¡£

ÔÚx86ÉÏ£¬ÀàËÆµÄ²Ù×÷Ö»»áÓ°ÏìЧÂÊ£¬µ«ÊÇÔÚMIPS»òÕßsparcÉÏ£¬¿ÉÄܾÍÊÇÒ»¸öerror,ÒòΪËüÃÇÒªÇó±ØÐë×Ö½Ú¶ÔÆë.

Èç¹û³öÏÖ¶ÔÆë»òÕ߸³ÖµÎÊÌâÊ×ÏȲ鿴

1). ±àÒëÆ÷µÄbig little¶ËÉèÖÃ

2). ¿´ÕâÖÖÌåϵ±¾ÉíÊÇ·ñÖ§³Ö·Ç¶ÔÆë·ÃÎÊ

3). Èç¹ûÖ§³Ö¿´ÉèÖÃÁË¶ÔÆëÓë·ñ,Èç¹ûûÓÐÔò¿´·ÃÎÊʱÐèÒª¼ÓÄ³Ð©ÌØÊâµÄÐÞÊÎÀ´±êÖ¾ÆäÌØÊâ·ÃÎʲÙ×÷¡£

ARMÏÂµÄ¶ÔÆë´¦Àí

from DUI0067D_ADS1_2_CompLib type qulifiers

Óв¿·ÖÕª×ÔARM±àÒëÆ÷Îĵµ¶ÔÆë²¿·Ö¶ÔÆëµÄʹÓÃ:

1.__align(num)

Õâ¸öÓÃÓÚÐÞ¸Ä×î¸ß¼¶±ð¶ÔÏóµÄ×ֽڱ߽硣ÔÚ»ã±àÖÐʹÓÃLDRD»òÕßSTRDʱ¾ÍÒªÓõ½´ËÃüÁî__align(8)½øÐÐÐÞÊÎÏÞÖÆ¡£À´±£Ö¤Êý¾Ý¶ÔÏóÊÇÏàÓ¦¶ÔÆë¡£Õâ¸öÐÞÊζÔÏóµÄÃüÁî×î´óÊÇ8¸ö×Ö½ÚÏÞÖÆ,¿ÉÒÔÈÃ2×ֽڵĶÔÏó½øÐÐ4×Ö½Ú¶ÔÆë,µ«ÊDz»ÄÜÈÃ4×ֽڵĶÔÏó2×Ö½Ú¶ÔÆë¡£ __alignÊÇ´æ´¢ÀàÐÞ¸Ä,ËûÖ»ÐÞÊÎ×î¸ß¼¶ÀàÐͶÔÏó²»ÄÜÓÃÓڽṹ»òÕߺ¯Êý¶ÔÏó¡£

2.__packed

__packedÊǽøÐÐÒ»×Ö½Ú¶ÔÆë

l ²»ÄܶÔpackedµÄ¶ÔÏó½øÐÐ¶ÔÆë

l ËùÓжÔÏóµÄ¶Áд·ÃÎʶ¼½øÐÐ·Ç¶ÔÆë·ÃÎÊ

l float¼°°üº¬floatµÄ½á¹¹ÁªºÏ¼°Î´ÓÃ__packedµÄ¶ÔÏ󽫲»ÄÜ×Ö½Ú¶ÔÆë

l __packed¶Ô¾Ö²¿ÕûÐαäÁ¿ÎÞÓ°Ïì

l Ç¿ÖÆÓÉunpacked¶ÔÏóÏòpacked¶ÔÏóת»¯ÊÇ䶨Òå,ÕûÐÎÖ¸Õë¿ÉÒԺϷ¨¶¨

ÒåΪpacked¡£

__packed int* p; //__packed int ÔòûÓÐÒâÒå

2.5¶ÔÆë»ò·Ç¶ÔÆë¶Áд·ÃÎÊ´øÀ´ÎÊÌâ

__packed struct STRUCT_TEST

{char a;int b;char c;

} ;

//¶¨ÒåÈçϽṹ´ËʱbµÄÆðʼµØÖ·Ò»¶¨ÊDz»¶ÔÆëµÄ,ÔÚÕ»ÖзÃÎÊb¿ÉÄÜÓÐÎÊÌâ,ÒòΪջÉÏÊý¾Ý¿Ï¶¨ÊÇ¶ÔÆë·ÃÎÊ[from CL]

//½«ÏÂÃæ±äÁ¿¶¨Òå³ÉÈ«¾Ö¾²Ì¬²»ÔÚÕ»ÉÏ

static char* p;static struct STRUCT_TEST a;void Main()

{

__packed int* q; //´Ëʱ¶¨Òå³É__packedÀ´ÐÞÊε±Ç°qÖ¸ÏòΪ·Ç¶ÔÆëµÄÊý¾ÝµØÖ·ÏÂÃæµÄ·ÃÎÊÔò¿ÉÒÔ

p = (char*)&a;

q = (int*)(p+1);

*q = 0x87654321; /*

µÃµ½¸³ÖµµÄ»ã±àÖ¸ÁîºÜÇå³þ

ldr r5,0x20001590 ; = #0x12345678

[0xe1a00005] mov r0,r5

[0xeb0000b0] bl __rt_uwrite4 //ÔÚ´Ë´¦µ÷ÓÃÒ»¸öд4byteµÄ²Ù×÷º¯Êý

[0xe5c10000] strb r0,[r1,#0] //º¯Êý½øÐÐ4´Îstrb²Ù×÷È»ºó·µ»Ø±£Ö¤ÁËÊý¾ÝÕýÈ·µÄ·ÃÎÊ

[0xe1a02420] mov r2,r0,lsr #8

[0xe5c12001] strb r2,[r1,#1]

[0xe1a02820] mov r2,r0,lsr #16

[0xe5c12002] strb r2,[r1,#2]

[0xe1a02c20] mov r2,r0,lsr #24

[0xe5c12003] strb r2,[r1,#3]

[0xe1a0f00e] mov pc,r14

*/ /*

Èç¹ûqûÓмÓ__packedÐÞÊÎÔò»ã±à³öÀ´Ö¸ÁîÊÇÕâÑùÖ±½Ó»áµ¼ÖÂÆæµØÖ·´¦·ÃÎÊʧ°Ü

[0xe59f2018] ldr r2,0x20001594 ; = #0x87654321

[0xe5812000] str r2,[r1,#0]

*/

//ÕâÑù¿ÉÒÔºÜÇå³þµÄ¿´µ½·Ç¶ÔÆë·ÃÎÊÊÇÈçºÎ²úÉú´íÎóµÄ

//ÒÔ¼°ÈçºÎÏû³ý·Ç¶ÔÆë·ÃÎÊ´øÀ´ÎÊÌâ

//Ò²¿ÉÒÔ¿´µ½·Ç¶ÔÆë·ÃÎÊºÍ¶ÔÆë·ÃÎʵÄÖ¸Áî²îÒìµ¼ÖÂЧÂÊÎÊÌâ

 

 
   
1769 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-28[±±¾©]
OCSMPÈÏÖ¤£ºOCSMP-MBF 8-29[±±¾©]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 9-9[±±¾©]
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸Àýʵ¼ù 9-24[±±¾©]
ÐèÇó·ÖÎöʦÄÜÁ¦ÅàÑø 10-30[±±¾©]
MBSEÌåϵÓëʵ¼ù 8-26[±±¾©]
 
×îÐÂÎÄÕÂ
»ùÓÚFPGAµÄÒì¹¹¼ÆËãÔÚ¶àýÌåÖеÄÓ¦ÓÃ
ÉîÈëLinuxÄں˼ܹ¹¡ª¡ª¼ò½éÓë¸ÅÊö
LinuxÄÚºËϵͳ¼Ü¹¹½éÉÜ
dzÎöǶÈëʽCÓÅ»¯¼¼ÇÉ
½ø³Ì¼äͨÐÅ£¨IPC£©½éÉÜ
×îпγÌ
ǶÈëʽLinuxÇý¶¯¿ª·¢
´úÂëÕû½àÖ®µÀ-̬¶È¡¢¼¼ÒÕÓëϰ¹ß
ǶÈëʽÈí¼þ²âÊÔ
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
ǶÈëʽÈí¼þ¿É¿¿ÐÔÉè¼Æ
³É¹¦°¸Àý
ij¾ü¹¤Ëù ǶÈëʽÈí¼þ¼Ü¹¹
Öк½¹¤ÒµÄ³Ñо¿Ëù ǶÈëʽÈí¼þ¿ª·¢Ö¸ÄÏ
ij¹ìµÀ½»Í¨ ǶÈëʽÈí¼þ¸ß¼¶Éè¼ÆÊµ¼ù
ÉîÛÚ Ç¶ÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
ijÆóÒµ »ùÓÚIPDµÄǶÈëʽÈí¼þ¿ª·¢