http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&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 : 6302 Date : 2012/07/05 11:56
|