1586, 45/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   wolverine
   [ÀÚÀÛ] C °­ÁÂ [3] - Variable & Memory

http://www.hackerschool.org/HS_Boards/zboard.php?desc=desc&no=2035 [º¹»ç]


À̹ø Àå¿¡¼­´Â º¯¼ö¿Í ¸Þ¸ð¸®ÀÇ °ü°è¸¦ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

º¯¼ö´Â
- local variable(Áö¿ªº¯¼ö)
- global variable(Àü¿ªº¯¼ö)
·Î ³ª´µ¾î Áý´Ï´Ù.

local variableÀº function(ÇÔ¼ö) ³»¿¡¼­ ¼±¾ðµÇ´Â º¯¼öÀÔ´Ï´Ù.
global variableÀº ÇÔ¼ö ¹Û¿¡¼­ ¼±¾ðµÇ´Â º¯¼ö ÀÔ´Ï´Ù.

int g1;
short g2;

void function1(void)
{
    int a;
    short b[10];
    char c[20];

    ....

}

À§ÀÇ ¿¹Á¦¿¡¼­ º¯¼ö a,b,c´Â ¸ðµÎ local variableÀ̸ç,
¸ðµç local variableÀº stack ¿µ¿ª¿¡ ÇÒ´çÀÌ µË´Ï´Ù.

º¯¼ö g1,g2´Â ¸ðµÎ global variableÀ̸ç,
¸ðµç ÃʱâÈ­ µÇÁö ¾ÊÀº global variableÀº ±âº»ÀûÀ¸·Î .bss ¿µ¿ª¿¡ ÇÒ´çÀÌ µË´Ï´Ù.

¸¸¾à float pi = 3.141592; ¿Í °°ÀÌ piÀÇ ¼±¾ð°ú µ¿½Ã¿¡ ÃʱâÈ­°¡ µÇ¾ú´Ù¸é,
ÀÌ º¯¼ö´Â .data ¿µ¿ª¿¡ ÇÒ´çÀÌ µË´Ï´Ù.

2Àå¿¡¼­ linker command fileÀ» ÅëÇؼ­ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ memoryÀÇ ±¸Á¶¿Í
°¢°¢ÀÇ ¿µ¿ªº°·Î ½ÃÀÛ¹øÁö/Å©±â¸¦ ¼³Á¤ÇØÁØ´Ù°í ¹è¿ü½À´Ï´Ù.

¸¸¾à local º¯¼ö¸¦ ¾ÆÁÖ Å« »çÀÌÁî·Î ¼±¾ðÇÏ¸é ¾î¶»°Ô µÉ±î¿ä?

void function(void)
{
     int b[100000];
     ....
}

ÀÌ·¸°Ô ¼±¾ðÀ» Çϸé compiler¿¡ Á¾·ù¿¡ µû¶ó¼­ warningÀ» ³»ÁÖ´Â °æ¿ìµµ ÀÖ°í,
±×·¸Áö ¾ÊÀº °æ¿ìµµ ÀÖ½À´Ï´Ù.
ÇÏÁö¸¸, stackÀÇ Å©±â¸¦ ³Ñ¾î¼­´Â local º¯¼ö¸¦ À§¿Í °°ÀÌ ¼±¾ðÇÏ°í,

for(i=0; i<100000; i++) b[i] = i;

¿Í °°Àº code°¡ ÇÔ¼ö ³»¿¡¼­ ¼öÇàÀÌ µÈ´Ù°í °¡Á¤Çϸé, ¹«½¼ ÀÏÀÌ ÀϾ±î¿ä?

»ç½Ç processor°¡ program¸¦ Á÷Á¢ ½ÇÇàÇÏ´Â Áß¿¡´Â Áö±Ý ³»°¡ access(read/write)ÇÏ´Â ¿µ¿ªÀÌ
stackÀÎÁö, ¾Æ´Ï¸é ´Ù¸¥ ¿µ¿ªÀÎÁö Àß ¾ËÁö ¸øÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù.
À§¿Í °°Àº °æ¿ì´Â ½ÇÁ¦·Î, b[i]ÀÇ ¸ðµç ¹øÁö¿¡ i°ªÀÌ ÀúÀåµÇ°í,
¸¸¾à stackÀ» ³Ñ¾î¼­´Â ¿µ¿ªÀÌ¶óµµ i°ªÀÌ ÀúÀåµÇ°Ô µË´Ï´Ù.

stack°ú ÀÎÁ¢ÇÑ memory¿¡ ´Ù¸¥ ¿µ¿ªÀÌ À§Ä¡ÇÏ°í ÀÖ´Ù¸é,
±× ¿µ¿ª¿¡ ÇÒ´ç µÇ¾î ÀÖ´Â º¯¼ö³ª Äڵ带 i °ªÀ¸·Î ¹Ù²Ù°Ô µÇ°í,
°á°úÀûÀ¸·Î programÀÇ Á¤»óÀûÀÎ ¼öÇàÀ» ¸øÇÏ°Ô ¸¸µé¾î ¹ö¸³´Ï´Ù.

ÀÌ¿Í °°Àº °æ¿ì¸¦ stack overflow¶ó°í ÇÕ´Ï´Ù.

µû¶ó¼­, Å« Å©±âÀÇ ¹è¿­(array)´Â °¡´ÉÇÑ local º¯¼ö¿¡ ÇÒ´çÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

¹Ý¸é¿¡ global variableÀº ÇÁ·Î±×·¥ Á¾·á½Ã±îÁö memory¿¡ ÇÒ´çÀÌ µÇ¾î¾ß ÇÕ´Ï´Ù.
Å©±â°¡ Å« global variableµéÀÌ ÇÁ·Î±×·¥ Áß°£ Áß°£¿¡¸¸ »ç¿ëÀÌ µÇ´Â °æ¿ì´Â
memory ÀÔÀå¿¡¼­´Â ³¶ºñ°¡ µÉ ¼ö ÀÖ½À´Ï´Ù.

stack¿¡ ÇÒ´çµÈ local variableÀº ÇÔ¼öÀÇ ½ÃÀÛ~³¡, Áï ÇÔ¼ö°¡ ½ÇÇàµÇ´Â µ¿¾È¿¡¸¸
stack¿¡ ÀÚ¸®Àâ±â ¶§¹®¿¡, ¸Þ¸ð¸® »çÀÌÁî ÀÔÀå¿¡¼­´Â ÈξÀ °æÀçÀûÀÔ´Ï´Ù.

Áï, function1 ÀÇ int a[100] µµ stack ¿¡ ÇÒ´çÀÌ µÇ°í,
function2ÀÇ int b[100]µµ stack¿¡ ÇÒ´çÀÌ µË´Ï´Ù.
ÁÖ¾îÁø stack °ø°£À» ³Ñ¾î¼­Áö¸¸ ¾Ê´Â´Ù¸é
ÇÔ¼ö ³»¿¡¼­ ±×¶§ ±×¶§ ÇÊ¿äÇÑ º¯¼öµéÀº µ¿ÀÏÇÑ stackÀ̶ó´Â °ø°£À»
°è¼ÓÀûÀ¸·Î È°¿ëÇÏ°Ô µË´Ï´Ù

ÇÏÁö¸¸, function1¿¡¼­¸¸ ÀÌ¿ëµÇ´Â int a[100]°ú
function2¿¡¼­¸¸ ÀÌ¿ëµÇ´Â int b[100]À»
global variable·Î ¼±¾ðÇÏ°Ô µÇ¸é
ÇÁ·Î±×·¥ÀÇ ³¡ÀÌ ³¯¶§±îÁö Ç×»ó ¸Þ¸ð¸®¿¡ a[100]°ú b[100]ÀÌ
ÀÚ¸®Àâ°í ÀÖ°Ô µÇ¾î ¸¹Àº ³¶ºñ°¡ µË´Ï´Ù.

NOTE:
ÀÌ·¯ÇÑ °ÍµéÀ» ÇØ°áÇϱâ À§Çؼ­ dynamic memory allocation À̶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù.
ÃßÈÄ °­Á¿¡¼­ ¼³¸íÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

À̹ø Àå¿¡¼­´Â Àü¿ª º¯¼ö/Áö¿ª º¯¼ö¿Í ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇؼ­ ¾Ë¾Æº¸¾Ò½À´Ï´Ù.
½ÇÁ¦·Î debugger¸¦ ÅëÇؼ­,
°¢°¢ÀÇ º¯¼öÀÇ address¸¦ Çѹø »ìÆì º¸½Ã¸é,
À§¿Í °°Àº ±ÔÄ¢¿¡ ÀÇÇؼ­ address°¡ ÇÒ´çÀÌ µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù.

Best Regards,
Wolverine


























  Hit : 6350     Date : 2012/07/05 11:56



    
pkw5240 ļ ¤¾¤¾
»ç½Ç processor°¡ program¸¦ Á÷Á¢ ½ÇÇàÇÏ´Â Áß¿¡´Â Áö±Ý ³»°¡ access(read/write)ÇÏ´Â ¿µ¿ªÀÌ
stackÀÎÁö, ¾Æ´Ï¸é ´Ù¸¥ ¿µ¿ªÀÎÁö Àß ¾ËÁö ¸øÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù.
À§¿Í °°Àº °æ¿ì´Â ½ÇÁ¦·Î, b[i]ÀÇ ¸ðµç ¹øÁö¿¡ i°ªÀÌ ÀúÀåµÇ°í,
¸¸¾à stackÀ» ³Ñ¾î¼­´Â ¿µ¿ªÀÌ¶óµµ i°ªÀÌ ÀúÀåµÇ°Ô µË´Ï´Ù

À̸» Á¤¸» ÀÌÇØ°¡ Àß°¡°ÔÇØÁֳ׿ä!
´öºÐ¿¡ ½ºÅÿÀ¹öÇ÷ο쿡´ëÇØ È®½ÇÈ÷ ¾Ë¾Ò¾î¿ä!! °¨»çÇØ¿ä
2012/07/11  
wolverine ½ÇÁ¦ Çö¾÷¿¡¼­µµ °³¹ß½Ã¿¡ °¡²û Àú·± ¹®Á¦·Î °í»ýÀ» ÇÒ °æ¿ìµµ ÀÖ½À´Ï´Ù.
°¨»çÇÕ´Ï´Ù.
2012/07/11  
706   [ÀÚÀÛ] C++ ±âÃÊ Ç÷¯½º # 1[3]     ÃÊÄÝ·¿³ªÀÎ
02/09 8646
705   [ÀÚÀÛ] C ¾ð¾î óÀ½ ½ÃÀÛÇϽô ºÐµéÀ» À§ÇÑ °­Á - <4. °è»ê Çϸ®>[3]     kevin0960
06/12 7279
704   [ÀÚÀÛ] C °­ÁÂ [7] - PointerÀÇ È°¿ë (Device Driver)[2]     wolverine
07/13 6785
703   [ÀÚÀÛ] C °­ÁÂ [6] - Pointer & Array     wolverine
07/12 6107
702   [ÀÚÀÛ] C °­ÁÂ [5] - Pointer     wolverine
07/11 7997
701   [ÀÚÀÛ] C °­ÁÂ [4] - Dynamic Memory Allocation[2]     wolverine
07/06 5965
  [ÀÚÀÛ] C °­ÁÂ [3] - Variable & Memory[2]     wolverine
07/05 6349
699   [ÀÚÀÛ] C °­ÁÂ [1] - Compiler Tool Chain[4]     wolverine
07/04 7953
698   [ÀÚÀÛ] À©µµ¿ìÁî ½Ã½ºÅÛ ÆÄÀÏ¿¡ ÀÎÁ§¼ÇµÈ ¹ÙÀÌ·¯½º Àâ´Â °£´ÜÇÑ ÆÁ     cpk115
03/12 8453
697   [ÀÚÀÛ] À©µµ¿ì cmd ÆÁ - º¹»çÇϱâ[7]     ¼Ò¿ï
03/01 9289
696   [ÀÚÀÛ] À¥º¿À» ¸¸µé¾î º¸ÀÚ.[11]     kjwon15
02/08 15381
695   [ÀÚÀÛ] ÀÚµ¿ÇØÅ· USB¿¡ ´ëÇؼ­[4]     namjmnam
11/21 22343
694   [ÀÚÀÛ] Ãʺ¸ÀÚ¸¦ À§ÇÑ C ¾ð¾î °­ÁÂ~[1]     kevin0960
08/21 6557
693   [ÀÚÀÛ] Ãʺ¸ÀÚ¸¦ À§ÇÑ C ¾ð¾î °­ÁÂ[8]     kevin0960
08/22 6297
692   [ÀÚÀÛ] Ãʺ¸ÀÚµéÀ» À§ÇÑ C ¾ð¾î °­Á - 3[2]     kevin0960
04/28 7097
691   [ÀÚÀÛ] Ãʺ¸ ¸®¹ö½Ì ! [5][2]     siosio24
08/17 5858
690   [ÀÚÀÛ] Ãʺ¸ ¸®¹ö½Ì ! [4][2]     siosio24
08/17 5628
689   [ÀÚÀÛ] Ãʺ¸ ¸®¹ö½Ì ! [3]     siosio24
08/17 6001
688   [ÀÚÀÛ] Ãʺ¸ ¸®¹ö½Ì ! [2][2]     siosio24
08/17 5995
687   [ÀÚÀÛ] Ãʺ¸ ¸®¹ö½Ì ! [8]     siosio24
08/17 6621
[1]..[41][42][43][44] 45 [46][47][48][49][50]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org