±à¼ÍƼö: |
ÎÄÕÂÖ÷ÒªÊ×ÏÈÒ»¸öÓÉc/C++±àÒëµÄ³ÌÐòÕ¼ÓõÄÄÚ´æ·ÖÅ䣬ͨ³£¿ÉÒÔ°ÑÄÚ´æÀí½âΪ4¸ö·ÖÇø£ºÕ»¡¢¶Ñ¡¢È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢Çø¡£ÏÂÎÄ·Ö±ð¼òµ¥µØ½éÉÜÁ˸÷×ÔµÄÌØµã¡£
ÎÄÕÂÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûAlice±à¼ÍƼö¡£ |
|
CÓïÑÔÔÚÄÚ´æÖÐÒ»¹²·ÖΪÈçϼ¸¸öÇøÓò£¬·Ö±ðÊÇ£º
1. ÄÚ´æÕ»Çø£º ´æ·Å¾Ö²¿±äÁ¿Ãû£»
2. ÄÚ´æ¶ÑÇø£º ´æ·Ånew»òÕßmalloc³öÀ´µÄ¶ÔÏó£»
3. ³£ÊýÇø£º ´æ·Å¾Ö²¿±äÁ¿»òÕßÈ«¾Ö±äÁ¿µÄÖµ£»
4. ¾²Ì¬Çø£º ÓÃÓÚ´æ·ÅÈ«¾Ö±äÁ¿»òÕß¾²Ì¬±äÁ¿£»
5. ´úÂëÇø£º¶þ½øÖÆ´úÂë¡£
ÖªµÀÈçÉÏһЩÄÚ´æ·ÖÅä»úÖÆ£¬ÓÐÖúÓÚÎÒÃÇÀí½âÖ¸ÕëµÄ¸ÅÄî¡£
C/C++²»ÌṩÀ¬»ø»ØÊÕ»úÖÆ£¬Òò´ËÐèÒª¶Ô¶ÑÖеÄÊý¾Ý½øÐм°Ê±Ïú»Ù£¬·ÀÖ¹ÄÚ´æÐ¹Â©£¬Ê¹ÓÃfreeºÍdeleteÏú»ÙnewºÍmallocÉêÇëµÄ¶ÑÄڴ棬¶øÕ»ÄÚ´æÊǶ¯Ì¬ÊÍ·Å¡£
È«¾Ö±äÁ¿¡¢¾²Ì¬¾Ö²¿±äÁ¿±£´æÔÚÈ«¾ÖÊý¾ÝÇø£¬³õʼ»¯µÄºÍδ³õʼ»¯µÄ·Ö±ð±£´æÔÚÒ»Æð£»
ÆÕͨ¾Ö²¿±äÁ¿±£´æÔÚ¶ÑÕ»ÖУ»
È«¾Ö±äÁ¿ºÍ¾Ö²¿±äÁ¿ÔÚÄÚ´æÀïµÄÇø±ð£¿
Ò»¡¢Ô¤±¸ÖªÊ¶¡ª³ÌÐòµÄÄÚ´æ·ÖÅä
Ò»¸öÓÉc/C++±àÒëµÄ³ÌÐòÕ¼ÓõÄÄÚ´æ·ÖΪÒÔϼ¸¸ö²¿·Ö
1¡¢Õ»Çø£¨stack£©¡ª ÓɱàÒëÆ÷×Ô¶¯·ÖÅäÊÍ·Å £¬´æ·Åº¯ÊýµÄ²ÎÊýÖµ£¬¾Ö²¿±äÁ¿µÄÖµµÈ¡£Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£
2¡¢¶ÑÇø£¨heap£© ¡ª Ò»°ãÓɳÌÐòÔ±·ÖÅäÊÍ·Å£¬ Èô³ÌÐòÔ±²»ÊÍ·Å£¬³ÌÐò½áÊøÊ±¿ÉÄÜÓÉOS»ØÊÕ ¡£×¢ÒâËüÓëÊý¾Ý½á¹¹ÖеĶÑÊÇÁ½»ØÊ£¬·ÖÅ䷽ʽµ¹ÊÇÀàËÆÓÚÁ´±í£¬ºÇºÇ¡£3¡¢È«¾ÖÇø£¨¾²Ì¬Çø£©£¨static£©¡ª£¬È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿µÄ´æ´¢ÊÇ·ÅÔÚÒ»¿éµÄ£¬³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿ÔÚÒ»¿éÇøÓò£¨RW£©£¬
δ³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍδ³õʼ»¯µÄ¾²Ì¬±äÁ¿ÔÚÏàÁÚµÄÁíÒ»¿éÇøÓò£¨ZI£©¡£ - ³ÌÐò½áÊøºóÓÐϵͳÊÍ·Å
4¡¢ÎÄ×Ö³£Á¿Çø ¡ª³£Á¿×Ö·û´®¾ÍÊÇ·ÅÔÚÕâÀïµÄ¡£ ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å£¨RO£©
5¡¢³ÌÐò´úÂëÇø¡ª´æ·Åº¯ÊýÌåµÄ¶þ½øÖÆ´úÂë¡££¨RO£©
×¢£º
1¡¢¶ÔÓÚRO¡¢RWºÍWIµÄ¸ÅÄî²»ÊÇÌØ±ðÇå³þµÄÅóÓÑ£¬¿ÉÒԲο¼ÎÒµÄÁíÍâһƪÎÄÕ£¬Àï±ßÓÐÏêϸµÄ½âÊÍ¡£
2¡¢°´ÎÒ¸öÈËÀí½âΪÁ˼õÉÙÄÚ´æË鯬µÄ²úÉú£¬±àÒëÆ÷¿ÉÄܻὫ¶ÑÇøÓÖ·ÖΪblockºÍheapÇø¡£blockÓÉһϵÁдóСÏàµÈµÄÄÚ´æ¿é×é³É¡£·ÖÅäÄÚ´æÊ±ÏÈÔÚblockÖзÖÅ䣬Èç¹ûblockÕ¼ÂúÔò´ÓheapÇøÖзÖÅ䡣ͬʱblockµÄ´óСºÍ¸öÊý¿ÉÒÔͨ¹ýÅäÖÃÎļþ½øÐÐÅäÖã¬Ê¹Ö®´ïµ½Ò»¸öºÏÊʵÄÊýÁ¿¡£
Àý£º
/* ===========================
*/
/* HEAP CONF */
/* =========================== */
/* General configuration for both linear heap
and block based heap
* define this list to the size and count of individual
fixed-size pools
*/
#define BLOCK_LIST \
/* size count */ \
BLOCK( 22, 80 ) \
BLOCK( 44, 64 ) \
BLOCK( 56, 16 ) |
¶þ¡¢Àý×Ó³ÌÐò
//main.cpp
int a = 0; È«¾Ö³õʼ»¯Çø
char *p1; È«¾Öδ³õʼ»¯Çø
main()
{
int b;// Õ»
char s[] = "abc"; //"abc"ÔÚ³£Á¿Çø£¬sÔÚÕ»ÉÏ¡£
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"ÓÅ»¯³ÉÒ»¸öµØ·½¡£
} |
Ò»¸öÓÉC/C++±àÒëµÄ³ÌÐòÕ¼ÓõÄÄÚ´æ·ÖΪÒÔϼ¸¸ö²¿·Ö
1¡¢Õ»Çø£¨stack£©¡ª ³ÌÐòÔËÐÐʱÓɱàÒëÆ÷×Ô¶¯·ÖÅ䣬´æ·Åº¯ÊýµÄ²ÎÊýÖµ£¬¾Ö²¿±äÁ¿µÄÖµµÈ¡£
Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£
2¡¢¶ÑÇø£¨heap£© ¡ª ÔÚÄڴ濪±ÙÁíÒ»¿é´æ´¢ÇøÓò¡£
Ò»°ãÓɳÌÐòÔ±·ÖÅäÊÍ·Å£¬ Èô³ÌÐòÔ±²»ÊÍ·Å£¬³ÌÐò½áÊøÊ±¿ÉÄÜÓÉOS»ØÊÕ ¡£
×¢ÒâËüÓëÊý¾Ý½á¹¹ÖеĶÑÊÇÁ½»ØÊ£¬·ÖÅ䷽ʽµ¹ÊÇÀàËÆÓÚÁ´±í¡£
3¡¢È«¾ÖÇø£¨¾²Ì¬Çø£©£¨static£©¡ª±àÒëÆ÷±àÒëʱ¼´·ÖÅäÄÚ´æ¡£
È«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿µÄ´æ´¢ÊÇ·ÅÔÚÒ»¿éµÄ£¬
³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿ÔÚÒ»¿éÇøÓò£¬
δ³õʼ»¯µÄÈ«¾Ö±äÁ¿ºÍδ³õʼ»¯µÄ¾²Ì¬±äÁ¿ÔÚÏàÁÚµÄÁíÒ»¿éÇøÓò¡£
- ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å
4¡¢ÎÄ×Ö³£Á¿Çø ¡ª³£Á¿×Ö·û´®¾ÍÊÇ·ÅÔÚÕâÀïµÄ¡£ ³ÌÐò½áÊøºóÓÉϵͳÊÍ·Å¡£
5¡¢³ÌÐò´úÂëÇø¡ª´æ·Åº¯ÊýÌåµÄ¶þ½øÖÆ´úÂë¡£×¢Ò⣺¾²Ì¬¾Ö²¿±äÁ¿ºÍ¾²Ì¬È«¾Ö±äÁ¿
ÊôÓÚ¾²Ì¬´æ´¢·½Ê½µÄÁ¿²»Ò»¶¨¾ÍÊǾ²Ì¬±äÁ¿¡£
ÀýÈ磺ȫ¾Ö±äÁ¿ËäÊôÓÚ¾²Ì¬´æ´¢·½Ê½£¬µ«²»Ò»¶¨ÊǾ²Ì¬±äÁ¿£¬
±ØÐëÓÉ static¼ÓÒÔ¶¨Òåºó²ÅÄܳÉΪ¾²Ì¬Íⲿ±äÁ¿£¬»ò³Æ¾²Ì¬È«¾Ö±äÁ¿¡£
°Ñ¾Ö²¿±äÁ¿¸Ä±äΪ¾²Ì¬±äÁ¿ºóÊǸıäÁËËüµÄ´æ´¢·½Ê½£¬¼´¸Ä±äÁËËüµÄÉú´æÆÚ¡£
°ÑÈ«¾Ö±äÁ¿¸Ä±äΪ¾²Ì¬±äÁ¿ºóÊǸıäÁËËüµÄ×÷ÓÃÓò£¬ÏÞÖÆÁËËüµÄʹÓ÷¶Î§¡£
Ш×Ó
Ò»¸ö¿ÉÖ´ÐгÌÐòÎļþÐèÒªÔÚ¼ÆËã»úÓ²¼þÉÏÔËÐÐÆðÀ´£¬ÆäʵÖʾÍÊǾ²Ì¬µÄÎļþ±»¼ÓÔØµ½ÄÚ´æÖеĹý³Ì£¬¿ÉÖ´ÐгÌÐòÎļþÖ»ÊÇÒ»¸ö³ÌÐòµÄÔØÌå¡£ÄÇôִÐÐÒ»¸öÓ¦Óúó£¬ËüÔÚÄÚ´æÖÐÊÇÒ»¸öÔõÑùµÄ½á¹¹ÄØ£¬Çë¹Ø×¢½ñÌìµÄ×ß½ø¿ÆÑ§¡ª¡ª¡¶C/C++
³ÌÐòÄÚ´æ½á¹¹¡·¡£
¶¯&¾²
Ò»¸ö³ÌÐò±»¼ÓÔØµ½ÄÚ´æÖУ¬Õâ¿éÄÚ´æÊ×ÏȾʹæÔÚÁ½ÖÖÊôÐÔ£º¾²Ì¬·ÖÅäÄÚ´æºÍ¶¯Ì¬·ÖÅäÄÚ´æ¡£
¾²Ì¬·ÖÅäÄڴ棺ÊÇÔÚ³ÌÐò±àÒëºÍÁ´½Óʱ¾ÍÈ·¶¨ºÃµÄÄÚ´æ¡£
¶¯Ì¬·ÖÅäÄڴ棺ÊÇÔÚ³ÌÐò¼ÓÔØ¡¢µ÷Èë¡¢Ö´ÐеÄʱºò·ÖÅä/»ØÊÕµÄÄÚ´æ¡£
Text & Data & Bss
.text£ºÒ²³ÆÎª´úÂë¶Î(Code)£¬ÓÃÀ´´æ·Å³ÌÐòÖ´ÐдúÂ룬ͬʱҲ¿ÉÄÜ»á°üº¬Ò»Ð©³£Á¿(ÈçһЩ×Ö·û´®³£Á¿µÈ£©¡£¸Ã¶ÎÄÚ´æÎª¾²Ì¬·ÖÅ䣬ֻ¶Á(ijЩ¼Ü¹¹¿ÉÄÜÔÊÐíÐÞ¸Ä)¡£
Õâ¿éÄÚ´æÊǹ²ÏíµÄ,µ±Óжà¸öÏàͬ½ø³Ì(Process)´æÔÚʱ£¬¹²ÓÃͬһ¸ötext¶Î¡£
.data£ºÒ²Óеĵط½½ÐGVAR(global value)£¬ÓÃÀ´´æ·Å³ÌÐòÖÐÒѾ³õʼ»¯µÄ·ÇÁãÈ«¾Ö±äÁ¿¡£¾²Ì¬·ÖÅä¡£
dataÓÖ¿É·ÖΪ¶Áд£¨RW£©ÇøÓòºÍÖ»¶Á£¨RO£©ÇøÓò¡£
-> RO¶Î±£´æ³£Á¿ËùÒÔÒ²±»³ÆÎª.constdata
-> RW¶ÎÔòÊÇÆÕͨ·Ç³£È«¾Ö±äÁ¿£¬¾²Ì¬±äÁ¿¾ÍÔÚÆäÖÐ
.bss£º´æ·Å³ÌÐòÖÐΪ³õʼ»¯µÄºÍÁãֵȫ¾Ö±äÁ¿¡£¾²Ì¬·ÖÅ䣬ÔÚ³ÌÐò¿ªÊ¼Ê±Í¨³£»á±»ÇåÁã¡£
textºÍdata¶Î¶¼ÔÚ¿ÉÖ´ÐÐÎļþÖУ¬ÓÉϵͳ´Ó¿ÉÖ´ÐÐÎļþÖмÓÔØ£»¶øbss¶Î²»ÔÚ¿ÉÖ´ÐÐÎļþÖУ¬ÓÉϵͳ³õʼ»¯¡£
ÕâÈý¶ÎÄÚ´æ¾Í×é³ÉÁËÎÒÃDZàдµÄ³ÌÐòµÄ±¾Ì壬µ«ÊÇÒ»¸ö³ÌÐòÔËÐÐÆðÀ´£¬»¹ÐèÒª¸ü¶àµÄÊý¾ÝºÍÊý¾Ý¼äµÄ½»»¥£¬·ñÔòÕâ¸ö³ÌÐò¾ÍÊÇËÀµÄ£¬ÎÞÓõġ£ËùÒÔÎÒÃÇ»¹ÐèҪΪ¸ü¶àµÄÊý¾ÝºÍÊý¾Ý½»»¥Ìṩһ¿éÄڴ桪¡ª¶ÑÕ»¡£
¶ÑÕ»£¨Heap& Stack£©
¶ÑºÍÕ»¶¼ÊǶ¯Ì¬·ÖÅäÄڴ棬Á½Õ߿ռä´óС¶¼ÊǿɱäµÄ¡£
Stack£ºÕ»£¬´æ·ÅAutomatic Variables£¬°´ÄÚ´æµØÖ·Óɸߵ½µÍ·½ÏòÉú³¤£¬Æä×î´ó´óСÓɱàÒëʱȷ¶¨£¬Ëٶȿ죬µ«×ÔÓÉÐԲ×î´ó¿Õ¼ä²»´ó¡£
Heap£º¶Ñ£¬×ÔÓÉÉêÇëµÄ¿Õ¼ä£¬°´ÄÚ´æµØÖ·Óɵ͵½¸ß·½ÏòÉú³¤£¬Æä´óСÓÉϵͳÄÚ´æ/ÐéÄâÄÚ´æÉÏÏÞ¾ö¶¨£¬ËٶȽÏÂý£¬µ«×ÔÓÉÐԴ󣬿ÉÓÿռä´ó¡£
ÿ¸öÏ̶߳¼»áÓÐ×Ô¼ºµÄÕ»£¬µ«ÊǶѿռäÊǹ²Óõġ£
Tips£º
char* p = new
char[20];
// ÕâÐдúÂëÔÚHeapÖпª±ÙÁË20¸öchar³¤¶ÈµÄ¿Õ¼ä£¬Í¬Ê±ÔÚStackÉÏѹÈëÁËp£¬
// Ö¸Õë±äÁ¿p´æÔÚÓÚÕ»ÉÏ£¬ÆäֵΪ¸Õ¸ÕÔÚ¶ÑÉÏ¿ª±ÙµÄ¿Õ¼äµÄÊ×µØÖ·¡£ |
ͼ½â
ÔÚsw-atµÄ²©¿ÍÉϰÇÁËÒ»ÕÅͼ£¬ÕâÕÅͼÖÐËùʾÄÚ´æ¿Õ¼ä£¬µØÖ·ÓÉÏÂÍùÉÏÔö³¤£¬·Ö±ð±êʾÁË .text¡¢.data¡¢.bss¡¢stackºÍheapµÄÄÚ´æ·Ö²¿Çé¿ö¡£
ÎÒÃÇ¿ÉÒÔ¿´µ½£º
text¡¢data(gvar)¡¢bss ÔÚÄÚ´æÖеØÖ·½ÏµÍµÍµÄλÖã¨low level address£©£¬¶ø¶ÑÕ»ÔòÔÚÏà¶Ô½Ï¸ãµÄλÖá£
¶Ñ(Heap)Íù¸ßµØÖ··½ÏòÉú³¤£¬Õ»(Stack)ÍùµÍµØÖ··½ÏòÉú³¤¡£

ÔÚC\C++ÖУ¬Í¨³£¿ÉÒÔ°ÑÄÚ´æÀí½âΪ4¸ö·ÖÇø£ºÕ»¡¢¶Ñ¡¢È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢Çø¡£ÏÂÃæÎÒÃÇ·Ö±ð¼òµ¥µØ½éÉÜһϸ÷×ÔµÄÌØµã¡£
1 Õ»
ͨ³£ÊÇÓÃÓÚÄÇЩÔÚ±àÒëÆÚ¼ä¾ÍÄÜÈ·¶¨´æ´¢´óСµÄ±äÁ¿µÄ´æ´¢Çø£¬ÓÃÓÚÔÚº¯Êý×÷ÓÃÓòÄÚ´´½¨£¬ÔÚÀ뿪×÷ÓÃÓòºó×Ô¶¯Ïú»ÙµÄ±äÁ¿µÄ´æ´¢Çø¡£Í¨³£ÊǾֲ¿±äÁ¿£¬º¯Êý²ÎÊýµÈµÄ´æ´¢Çø¡£ËûµÄ´æ´¢¿Õ¼äÊÇÁ¬ÐøµÄ£¬Á½¸ö½ôÃܰ¤×Ŷ¨ÒåµÄ¾Ö²¿±äÁ¿£¬ËûÃǵĴ洢¿Õ¼äÒ²Êǽô°¤×ŵġ£Õ»µÄ´óСÊÇÓÐÏ޵ģ¬Í¨³£Visual
C++±àÒëÆ÷µÄĬÈÏÕ»µÄ´óСΪ1MB£¬ËùÒÔ²»Òª¶¨Òåint a[1000000]ÕâÑùµÄ³¬´óÊý×é¡£
2 ¶Ñ
ͨ³£ÊÇÓÃÓÚÄÇЩÔÚ±àÒëÆÚ¼ä²»ÄÜÈ·¶¨´æ´¢´óСµÄ±äÁ¿µÄ´æ´¢Çø£¬ËüµÄ´æ´¢¿Õ¼äÊDz»Á¬ÐøµÄ£¬Ò»°ãÓÉmalloc£¨»ònew£©º¯ÊýÀ´·ÖÅäÄÚ´æ¿é£¬²¢ÇÒÐèÒªÓÃfree£¨delete£©º¯ÊýÊÍ·ÅÄÚ´æ¡£Èç¹û³ÌÐòԱûÓÐÊͷŵô£¬ÄÇô¾Í»á³öÏÖ³£ËµµÄÄÚ´æÐ¹Â©ÎÊÌâ¡£ÐèҪעÒâµÄÊÇ£¬Á½¸ö½ô°¤×Ŷ¨ÒåµÄÖ¸Õë±äÁ¿£¬ËùÖ¸ÏòµÄmalloc³öÀ´µÄÁ½¿éÄÚ´æ²¢²»Ò»¶¨µÄÊǽô°¤×ŵģ¬ËùÒÔ»á²úÉúÄÚ´æË鯬¡£ÁíÍâÐèҪעÒâµÄÒ»µãÊÇ£¬¶ÑµÄ´óС¼¸ºõ²»ÊÜÏÞÖÆ£¬ÀíÂÛÉÏÿ¸ö³ÌÐò×î´ó¿É´ï4GB¡£
3 È«¾Ö/¾²Ì¬´æ´¢Çø
ºÍ¡°Õ»¡±Ò»Ñù£¬Í¨³£ÊÇÓÃÓÚÄÇЩÔÚ±àÒëÆÚ¼ä¾ÍÄÜÈ·¶¨´æ´¢´óСµÄ±äÁ¿µÄ´æ´¢Çø£¬µ«ËüÓÃÓÚµÄÊÇÔÚÕû¸ö³ÌÐòÔËÐÐÆÚ¼ä¶¼¿É¼ûµÄÈ«¾Ö±äÁ¿ºÍ¾²Ì¬±äÁ¿¡£
4 ³£Á¿´æ´¢Çø
ºÍ¡°È«¾Ö/¾²Ì¬´æ´¢Çø¡±Ò»Ñù£¬Í¨³£ÊÇÓÃÓÚÄÇЩÔÚ±àÒëÆÚ¼ä¾ÍÄÜÈ·¶¨´æ´¢´óСµÄ³£Á¿µÄ´æ´¢Çø£¬²¢ÇÒÔÚ³ÌÐòÔËÐÐÆÚ¼ä£¬´æ´¢ÇøÄڵij£Á¿ÊÇÈ«¾Ö¿É¼ûµÄ¡£ÕâÊÇÒ»¿é±È½ÏÌØÊâµÄ´æ´¢È¥£¬ËûÃÇÀïÃæ´æ·ÅµÄÊdz£Á¿£¬²»ÔÊÐí±»Ð޸ġ£
5 ×ܽá
¸ù¾ÝÉÏÃæµÄÄÚÈÝ£¬·Ö±ð½«Õ»ºÍ¶Ñ¡¢È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢Çø½øÐжԱȣ¬½á¹ûÈçÏ¡£
±í1 Õ»ºÍ¶ÑµÄ¶Ô±È

±í2 È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢ÇøµÄ¶Ô±ÈÈ«¾Ö/¾²Ì¬´æ´¢Çø

l Õ»Çø£ºÖ÷ÒªÓÃÀ´´æ·Å¾Ö²¿±äÁ¿, ´«µÝ²ÎÊý, ´æ·Åº¯ÊýµÄ·µ»ØµØÖ·¡£.esp ʼÖÕÖ¸ÏòÕ»¶¥,
Õ»ÖеÄÊý¾ÝÔ½¶à, espµÄֵԽС¡£
l ¶ÑÇø£ºÓÃÓÚ´æ·Å¶¯Ì¬·ÖÅäµÄ¶ÔÏó, µ±ÄãʹÓà mallocºÍnew µÈ½øÐзÖÅäʱ,ËùµÃµ½µÄ¿Õ¼ä¾ÍÔÚ¶ÑÖС£¶¯Ì¬·ÖÅäµÃµ½µÄÄÚ´æÇøÓò¸½´øÓзÖÅäÐÅÏ¢,
ËùÒÔÄãÄܹ» freeºÍdeleteËüÃÇ¡£
l Êý¾ÝÇø£ºÈ«¾Ö£¬¾²Ì¬ºÍ³£Á¿ÊÇ·ÖÅäÔÚÊý¾ÝÇøÖеģ¬Êý¾ÝÇø°üÀ¨bss£¨Î´³õʼ»¯Êý¾ÝÇø£©ºÍ³õʼ»¯Êý¾ÝÇø¡£
×¢Ò⣺
1£© ¶ÑÏò¸ßÄÚ´æµØÖ·Éú³¤£»
2£© Õ»ÏòµÍÄÚ´æµØÖ·Éú³¤£»
3£© ¶ÑºÍÕ»ÏàÏò¶øÉú£¬¶ÑºÍÕ»Ö®¼äÓиöÁÙ½çµã£¬³ÆÎªstkbrk¡£
1¡¢Ò»Ìõ½ø³ÌÔÚÄÚ´æÖеÄÓ³Éä
¼ÙÉèÏÖÔÚÓÐÒ»¸ö³ÌÐò£¬ËüµÄº¯Êýµ÷ÓÃ˳ÐòÈçÏ£º
main(...) ->; func_1(...) ->; func_2(...) ->;
func_3(...)£¬¼´£ºÖ÷º¯Êýmainµ÷Óú¯Êýfunc_1; º¯Êýfunc_1µ÷Óú¯Êýfunc_2;
º¯Êýfunc_2µ÷Óú¯Êýfunc_3¡£
µ±Ò»¸ö³ÌÐò±»²Ù×÷ϵͳµ÷ÈëÄÚ´æÔËÐÐ, Æä¶ÔÓ¦µÄ½ø³ÌÔÚÄÚ´æÖеÄÓ³ÉäÈçÏÂͼËùʾ£º

×¢Ò⣺
l Ëæ×ź¯Êýµ÷ÓòãÊýµÄÔö¼Ó£¬º¯ÊýÕ»Ö¡ÊÇÒ»¿é¿éµØÏòÄÚ´æµÍµØÖ··½ÏòÑÓÉìµÄ£»
l Ëæ×Žø³ÌÖк¯Êýµ÷ÓòãÊýµÄ¼õÉÙ£¨¼´¸÷º¯Êýµ÷Óõķµ»Ø£©£¬Õ»Ö¡»áÒ»¿é¿éµØ±»ÒÅÆú¶øÏòÄÚ´æµÄ¸ßÖ··½Ïò»ØËõ£»
l ¸÷º¯ÊýµÄÕ»Ö¡´óÐ¡Ëæ×ź¯ÊýµÄÐÔÖʵIJ»Í¬¶ø²»µÈ, Óɺ¯ÊýµÄ¾Ö²¿±äÁ¿µÄÊýÄ¿¾ö¶¨¡£
l δ³õʼ»¯Êý¾ÝÇø(BSS)£ºÓÃÓÚ´æ·Å³ÌÐòµÄ¾²Ì¬±äÁ¿£¬Õⲿ·ÖÄÚ´æ¶¼ÊDZ»³õʼ»¯ÎªÁãµÄ£»¶ø³õʼ»¯Êý¾ÝÇøÓÃÓÚ´æ·Å¿ÉÖ´ÐÐÎļþÀïµÄ³õʼ»¯Êý¾Ý¡£ÕâÁ½¸öÇøÍ³³ÆÎªÊý¾ÝÇø¡£
l Text(´úÂëÇø)£ºÊǸöÖ»¶ÁÇø£¬´æ·ÅÁ˳ÌÐòµÄ´úÂë¡£Èκγ¢ÊÔ¶Ô¸ÃÇøµÄд²Ù×÷»áµ¼Ö¶ÎÎ¥·¨³ö´í¡£´úÂëÇøÊDZ»¶à¸öÔËÐиÿÉÖ´ÐÐÎļþµÄ½ø³ÌËù¹²ÏíµÄ¡£
l ½ø³Ì¶ÔÄÚ´æµÄ¶¯Ì¬ÉêÇëÊÇ·¢ÉúÔÚHeap(¶Ñ)ÀïµÄ¡£Ëæ×Åϵͳ¶¯Ì¬·ÖÅ䏸½ø³ÌµÄÄÚ´æÊýÁ¿µÄÔö¼Ó£¬Heap(¶Ñ)ÓпÉÄÜÏò¸ßÖ·»òµÍÖ·ÑÓÉì,
ÕâÒÀÀµÓÚ²»Í¬CPUµÄʵÏÖ£¬µ«Ò»°ãÀ´ËµÊÇÏòÄÚ´æµÄ¸ßµØÖ··½ÏòÔö³¤µÄ¡£
l ÔÚδ³õʼ»¯Êý¾ÝÇø£¨BSS£©»òÕßStack(Õ»Çø)µÄÔö³¤ºÄ¾¡ÁËϵͳ·ÖÅ䏸½ø³ÌµÄ×ÔÓÉÄÚ´æµÄÇé¿öÏ£¬½ø³Ì½«»á±»×èÈû,
ÖØÐ±»²Ù×÷ϵͳÓøü´óµÄÄÚ´æÄ£¿éÀ´µ÷¶ÈÔËÐС£
l º¯ÊýµÄÕ»Ö¡£º°üº¬Á˺¯ÊýµÄ²ÎÊý(ÖÁÓÚ±»µ÷Óú¯ÊýµÄ²ÎÊýÊÇ·ÅÔÚµ÷Óú¯ÊýµÄÕ»Ö¡»¹ÊDZ»µ÷Óú¯ÊýÕ»Ö¡,
ÔòÒÀÀµÓÚ²»Í¬ÏµÍ³µÄʵÏÖ)¡£º¯ÊýµÄÕ»Ö¡Öеľֲ¿±äÁ¿ÒÔ¼°»Ö¸´¸Ãº¯ÊýµÄÖ÷µ÷º¯ÊýµÄÕ»Ö¡(¼´Ç°Ò»¸öÕ»Ö¡)ËùÐèÒªµÄÊý¾Ý,
°üº¬ÁËÖ÷µ÷º¯ÊýµÄÏÂÒ»ÌõÖ´ÐÐÖ¸ÁîµÄµØÖ·¡£
2¡¢ º¯ÊýµÄÕ»Ö¡
º¯Êýµ÷ÓÃʱËù½¨Á¢µÄÕ»Ö¡°üº¬ÏÂÃæµÄÐÅÏ¢£º
1£© º¯ÊýµÄ·µ»ØµØÖ·¡£·µ»ØµØÖ·ÊÇ´æ·ÅÔÚÖ÷µ÷º¯ÊýµÄÕ»Ö¡»¹ÊDZ»µ÷Óú¯ÊýµÄÕ»Ö¡Àȡ¾öÓÚ²»Í¬ÏµÍ³µÄʵÏÖ£»
2£© Ö÷µ÷º¯ÊýµÄÕ»Ö¡ÐÅÏ¢, ¼´Õ»¶¥ºÍÕ»µ×£»
3£© Ϊº¯ÊýµÄ¾Ö²¿±äÁ¿·ÖÅäµÄÕ»¿Õ¼ä£»
4£© Ϊ±»µ÷Óú¯ÊýµÄ²ÎÊý·ÖÅäµÄ¿Õ¼äÈ¡¾öÓÚ²»Í¬ÏµÍ³µÄʵÏÖ¡£
×¢Ò⣺
l BSSÇø£¨Î´³õʼ»¯Êý¾Ý¶Î£©£º²¢²»¸ø¸Ã¶ÎµÄÊý¾Ý·ÖÅä¿Õ¼ä£¬½ö½öÊǼǼÁËÊý¾ÝËùÐè¿Õ¼äµÄ´óС¡£
l DATA£¨³õʼ»¯µÄÊý¾Ý¶Î£©£ºÎªÊý¾Ý·ÖÅä¿Õ¼ä£¬Êý¾Ý±£´æÔÚÄ¿±êÎļþÖС£
»ù±¾ÉϳÌÐòÔ±ÔÚ¿ªÊ¼½Ó´¥Linux±à³Ìʱ¾Í´óµÖ¾Í¶¼Ìý¹ý´úÂë¶Î¡¢Êý¾Ý¶ÎµÈµÈ¸ÅÄËüÃÇÊǸ÷ÖÖÊý¾Ý´æ·ÅµÄλÖá£Í¨¹ýobjdump
-hÃüÁî¿ÉÒԲ鿴һ¸ö.oÎļþ(ÒѱàÒë³É¶þ½øÖÆÎļþµ«Î´Á´½Ó)µÄ¸÷¸ö¶Î£º

1. ´úÂë¶Î(.txt)
.txt¶Î´æ·Å´úÂë(È纯Êý)Ó벿·ÖÕûÊý³£Á¿£¬.txt¶ÎµÄÊý¾Ý¿ÉÒÔ±»Ö´ÐÐ
2. Êý¾Ý¶Î(.data)
.dataÓÃÓÚ´æ·Å³õʼ»¯¹ýµÄÈ«¾Ö±äÁ¿¡£ÈôÈ«¾Ö±äÁ¿ÖµÎª0£¬ÎªÁËÓÅ»¯±àÒëÆ÷»á½«Ëü·ÅÔÚ.bss¶ÎÖÐ
3. bss¶Î(.bss)
.bss¶Î±»ÓÃÀ´´æ·ÅÄÇЩûÓгõʼ»¯»òÕß³õʼ»¯Îª0µÄÈ«¾Ö±äÁ¿¡£bss¶ÎÖ»Õ¼ÔËÐÐʱµÄÄÚ´æ¿Õ¼ä¶ø²»Õ¼Îļþ¿Õ¼ä¡£ÔÚ³ÌÐòÔËÐеÄÕû¸öÖÜÆÚÄÚ£¬.bss¶ÎµÄÊý¾ÝÒ»Ö±´æÔÚ
.dataºÍ.bss¶ÎµÄÇø±ð¿ÉÒÔͨ¹ýÏÂÃæ³ÌÐòÑéÖ¤£º
#include <stdio.h>
char global_arr[1024 * 1024]; //´æ·ÅÔÚ.bss¶Î
int main(void)
{
return 0;
|
±àÒëºó²é¿´´óС£º

ÏÔÈ»£¬global_arrÊý×éÕ¼¾ÝµÄ1M¿Õ¼ä²¢Ã»ÓÐÕ¼¾ÝÎļþ¿Õ¼ä¡£½«global_arrÊý×é¸Ä·ÅÔÚ.data¶ÎÖУº
char global_arr[1024
* 1024] = {4}; //´æ·ÅÔÚ.data¶Î |
±àÒëºó²é¿´´óС£º

Îļþ±ä³ÉÁË1M¶à£¬ÏÔÈ».data¶ÎÉϵÄÊý¾ÝÊÇÕ¼¾ÝÎļþ¿Õ¼äµÄ¡£
4. ³£Á¿Êý¾Ý¶Î(.rodata)
ro±íread only£¬ÓÃÓÚ´æ·Å²»¿É±äÐ޸ĵij£Á¿Êý¾Ý£¬Ò»µ©³ÌÐòÖÐ¶ÔÆäÐ޸Ľ«»á³öÏֶδíÎó£º
(1) ³ÌÐòÖеij£Á¿²»Ò»¶¨¾Í·ÅÔÚrodataÖУ¬ÓеÄÁ¢¼´ÊýºÍÖ¸Áî±àÂë·ÅÔÚ.textÖÐ
(2) ¶ÔÓÚ×Ö·û´®³£Á¿£¬Èô³ÌÐòÖдæÔÚÖØ¸´µÄ×Ö·û´®£¬±àÒëÆ÷»á±£Ö¤Ö»´æÔÚÒ»¸ö
(3) rodataÊÇÔÚ¶à¸ö½ø³Ì¼ä¹²ÏíµÄ
(4) ÓеÄǶÈëʽϵͳ£¬rodata·ÅÔÚROM(»òÕßNOR FLASH)ÖУ¬ÔËÐÐʱֱ½Ó¶ÁÈ¡ÎÞÐè¼ÓÔØÖÁRAM(¹þ·ðºÍ·ëŵÒÀÂü£¬´ÓSTM32µÄconstÈ«¾Ö±äÁ¿ËµÆðÓÐËù¼Ç¼)
ÏëÒª½«Êý¾Ý·ÅÔÚ.rodataÖ»ÐèÒª¼ÓÉÏconstÊôÐÔÐÞÊμ´¿É¡£
5. Õ»
Õ»ÊÇÓÃÓÚ´æ·ÅÁÙʱ±äÁ¿ºÍº¯Êýµ÷Óõġ£Õ»Ò²ÊÇÒ»ÖÖÏȽøºó³öµÄÊý¾Ý½á¹¹£¬º¯ÊýµÄµÝ¹éµ÷ÓÃÕýµÃÒæÓÚÕ»µÄ´æÔÚ¡£Ðè×¢Òâ´æÔÚÕ»µÄÊý¾ÝÖ»ÔÚµ±Ç°º¯ÊýºÍ×Óº¯ÊýÖÐÓÐЧ£¬Ò»µ©º¯Êý·µ»ØÊý¾Ý½«»á±»×Ô¶¯ÊÍ·Å¡£
6. ¶Ñ
¶ÑµÄʹÓÃÖÜÆÚÓÐʹÓÃÕß¿ØÖÆ£¬³ÌÐòÖеÄÄÚ´æÐ¹Â©¶àÒò³ÌÐòÔ±¶Ô¶ÑµÄ¹ÜÀí²»µ±ÒýÆð£¬Ðè½÷É÷¡£
7. .comment¶Î
ÔÚÉÏͼÖл¹¿´µ½.comment¶Î£¬Ëü´æ·ÅµÄÊDZàÒëÆ÷°æ±¾µÈÐÅÏ¢¡£³ýÁË.comment£¬»¹ÓÐ.note¡¢.hashµÈÆäËû¶Î£¬Á˽⼴¿É¡£
|