1581, 1/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   wolverine
   [ÀÚÀÛ] C °­ÁÂ [4] - Dynamic Memory Allocation

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


À̹ø Àå¿¡¼­´Â dynamic memory allocation ¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

Áö±Ý±îÁö °­ÀǸ¦ ÅëÇؼ­

global variable˼
build time memory allocation,
Áï, build¸¦ ÇÒ ¶§¿¡ º¯¼ö°¡ ÇÒ´çµÇ´Â memory address°¡ °áÁ¤À̵Ǹç,
º¯¼öÀÇ life-timeÀº ÇÁ·Î±×·¥ÀÌ ³¡³¯¶§±îÁö,
Áï, ÇÁ·Î±×·¥ÀÌ Á¾·á µÉ¶§±îÁö ¸Þ¸ð¸®ÀÇ °ø°£À» Â÷ÁöÇÏ°í ÀÖ´Ù
¶ó´Â °ÍÀ» ¹è¿ü½À´Ï´Ù.

¶ÇÇÑ local variableÀº
stack À̶ó´Â ¸Þ¸ð¸® ¿µ¿ª¿¡ ÇöÀç stack pointerÀÇ À§Ä¡¿¡ µû¶ó¼­ ±×¶§ ±×¶§ ÇÒ´çÀÌ µÇ¸ç,
º¯¼öÀÇ life-timeÀº ÇØ´ç ÇÔ¼ö°¡ return µÉ¶§±îÁö,
Áï, ÇÔ¼ö°¡ returnÀÌ µÇ¸é, º¯¼öÀÇ »ý¸íµµ ³¡ÀÌ ³ª¸ç,
stack pointerµµ ÇÔ¼ö°¡ È£ÃâµÇ±â ÀÌÀüÀÇ À§Ä¡·Î º¹±ÍÇϸç,
¶Ç ´Ù¸¥ ÇÔ¼ö¿¡¼­ ¶Ç ´Ù¸¥ local º¯¼ö°¡ µ¿ÀÏÇÑ stack¿¡ ÇÒ´çÀÌ µÉ ¼ö ÀÖ´Ù
¶ó´Â °ÍÀ» ¹è¿ü½À´Ï´Ù.

global variable˼
¼­·Î ´Ù¸¥ ¿©·¯ ÇÔ¼ö¿¡¼­ Á¢±Ù(access, read/write) °¡´ÉÇϸç,
Å©±â°¡ Å« array ÇüÅ·Π¼±¾ðÇÒ ¼ö ÀÖÁö¸¸,
local variable˼
ÇÔ¼ö ³»¿¡¼­¸¸ Á¢±Ù °¡´ÉÇϸç,
Å©±â°¡ Å« array ·Î ¼±¾ðÇϱ⿡´Â stack overflowÀÇ À§ÇèÀÌ ÀÖ½À´Ï´Ù.

±×·³, ´ÙÀ½°ú °°Àº func1~func9±îÁö ¼øÂ÷ÀûÀ¸·Î
È£ÃâµÇ´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù°í °¡Á¤À» Çغ¸ÁÒ.

func1();
func2();
func3();
func4();
func5();
func6();
func7();
func8();
func9();

À̶§¿¡,
func1~3´Â µ¿ÀÏÇÑ int a[10000]À̶ó´Â º¯¼ö ¹è¿­À» access ÇÏ°í,
func4~6´Â µ¿ÀÏÇÑ int b[10000]À̶ó´Â º¯¼ö ¹è¿­À» access ÇÏ°í,
func7~9´Â µ¿ÀÏÇÑ int c[10000]À̶ó´Â º¯¼ö ¹è¿­À» access ÇÑ´Ù°í,
°¡Á¤À» Çغ¾½Ã´Ù.

°¡Àå °£´ÜÇÏ°Ô´Â global variable·Î a,b,c ¸ðµÎ¸¦ ¼±¾ðÇÏ¸é µË´Ï´Ù.

ÇÏÁö¸¸, Àüü ÇÁ·Î±×·¥ÀÇ life-time µ¿¾È a,b,c°¡ Ç×»ó ¸Þ¸ð¸® °ø°£À» Â÷ÁöÇÏ°Ô µË´Ï´Ù.
func1~3ÀÌ ¼öÇàµÇ´Â µ¿¾ÈÀº b,c´Â ÀüÇô ÇÊ¿ä°¡ ¾ø´Âµ¥µµ ¸»ÀÌÁÒ...

ÀÌ·¯ÇÑ »óȲ¿¡¼­ ¸Þ¸ð¸®¸¦ È¿À²ÀûÀ¸·Î ¿î¿ëÇϱâ À§Çؼ­
dynamic memory allocation À» »ç¿ëÇÏ°Ô µË´Ï´Ù.
ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ±×¶§ ±×¶§ ÇÊ¿äÇÑ º¯¼ö ¹è¿­¿¡ ´ëÇÑ ¸Þ¸ð¸® ¿µ¿ªÀ» ÇÒ´ç ¹Þ¾Æ¼­
»ç¿ëÇÏ°í, »ç¿ëÀÌ ³¡³ª¸é ÇÒ´ç ¹ÞÀº ¸Þ¸ð¸® ¿µ¿ªÀ» ´Ù½Ã ÇØÁ¦ ÇÏ°Ô µË´Ï´Ù.

µ¿Àû ¸Þ¸ð¸® ÇÒ´ç
func1();  // ¸Þ¸ð¸® ÀÌ¿ë
func2();  // ¸Þ¸ð¸® ÀÌ¿ë
func3();  // ¸Þ¸ð¸® ÀÌ¿ë
¸Þ¸ð¸® ÇØÁ¦

µ¿Àû ¸Þ¸ð¸® ÇÒ´ç
func4();  // ¸Þ¸ð¸® ÀÌ¿ë
func5();  // ¸Þ¸ð¸® ÀÌ¿ë
func6();  // ¸Þ¸ð¸® ÀÌ¿ë
¸Þ¸ð¸® ÇØÁ¦

µ¿Àû ¸Þ¸ð¸® ÇÒ´ç
func7();  // ¸Þ¸ð¸® ÀÌ¿ë
func8();  // ¸Þ¸ð¸® ÀÌ¿ë
func9();  // ¸Þ¸ð¸® ÀÌ¿ë
¸Þ¸ð¸® ÇØÁ¦

µ¿Àû ¸Þ¸ð¸®´Â heap¿µ¿ª¿¡ ÇÒ´çÀÌ µÇ¸ç,
heapÀÇ Å©±â¸¸Å­ µ¿Àû ¸Þ¸ð¸®¸¦ ÇÒ´çÀÌ °¡´ÉÇÕ´Ï´Ù.

int *a;

a = (int*)malloc(10000*4);  // 10000x4 byte µ¿Àû ¸Þ¸ð¸® ÇÒ´ç


a[n] ÇüÅÂÀÇ ¹è¿­·Î ÀÌ¿ë...


free(a); // ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦.

freeÇÔ¼ö´Â ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦½ÃÄÑ ÁÝ´Ï´Ù.
ÇØÁ¦¶ó´Â ¸»Àº ÇöÀç a°¡ Àâ°íÀÖ´Â ¹°¸®ÀûÀÎ ¸Þ¸ð¸® °ø°£À»
´Ù¸¥ malloc¿¡ ÀÇÇؼ­ ÀÌ¿ë°¡´ÉÇϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù.

¸¸¾à ´ÙÀ½°ú °°ÀÌ a,b¸¦ Â÷·Ê·Î ÇÒ´çÇϸé,

a = (int*)malloc(10000*4);
b = (int*)malloc(10000*4);

b´Â aÀÇ base address¿¡¼­  40000 byte ¶³¾îÁø °ø°£¿¡ ÇÒ´çÀÌ µË´Ï´Ù.
ÇÏÁö¸¸, ´ÙÀ½°ú °°ÀÌ free°¡ µé¾î°¡¸é,

a = (int*)malloc(10000*4);
free(a);
b = (int*)malloc(10000*4);

b´Â a°¡ ÇÒ´çµÇ¾ú´ø ¸Þ¸ð¸® À§Ä¡¿¡ ´Ù½Ã ÇÒ´çµÇ°Ô µË´Ï´Ù.

ÀÌ·± °³³äÀ¸·Î dynamic memory allocationÀº
Á¦ÇÑµÈ ¸Þ¸ð¸® ȯ°æ¿¡¼­ È¿À²ÀûÀÎ ¸Þ¸ð¸® È°¿ëÀ» À§Çؼ­
¹Ýµå½Ã ÇÊ¿äÇÑ µµ±¸ ÀÔ´Ï´Ù.
½ÇÁ¦ »ó¿ë ÇÁ·Î±×·¥¿¡¼­ ÇʼöÀûÀ¸·Î ÀÌ¿ëµÇ´Â Áß¿äÇÑ °³³äÀÔ´Ï´Ù.

ÀÌ»óÀ¸·Î À̹ø ÀåÀ» ¸¶Ä¡°Ú½À´Ï´Ù.

Best Regards,
Wolverine














  Hit : 5926     Date : 2012/07/06 11:24



    
pkw5240 ¤¾¤¾´ÙÀ½±ÛÀº ¹º°¡¿©? ¾ó¸¥¿Ã·ÁÁÖ¼¼¿ä 2012/07/11  
wolverine °ð ¿Ã¶ó°©´Ï´Ù. ȸ»ç¿¡¼­ Á¡½É½Ã°£¿¡ ««È÷ ¾²°í Àִµ¥ .... ¤¾¤¾ 2012/07/11  
     [°øÁö] °­Á¸¦ ¿Ã¸®½Ç ¶§´Â ¸»¸Ó¸®¸¦ ´Þ¾ÆÁÖ¼¼¿ä^¤Ñ^ [29] ¸Û¸Û 02/27 18795
1580   °í¼ö´ÔµéÀÇ µµ¿òÀ» ¹Þ°í ½Í½À´Ï´Ù     vbnm111
02/11 271
1579   ¸®´ª½º Ä¿³Î 2.6 ¹öÀü ÀÌÈÄÀÇ LKM     jdo
07/25 761
1578   ½©ÄÚµå ¸ðÀ½     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/15 1595
1577   Call by value VS Call by Reference     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/15 965
1576   (²Ä¼ö) L.O.B Çѹ濡 Ŭ¸®¾îÇϱâ[2]     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/14 1312
1575   towelroot.c (zip) ÄÚ¸àÆÃ.[1]     scube
08/18 3833
1574   levitator.c (¾Èµå·ÎÀÌµå ·çÆÃ) °ø°Ý ºÐ¼® ¼Ò½º ÄÚµå °øÀ¯.[4]     scube
08/17 3736
1573   ¹«·á Á¤º¸º¸¾È ±â¼úÀÎÀç ¾ç¼º °úÁ¤ ±³À°»ý ¸ðÁý     chanjung111
06/17 4544
1572   K-Shield ÁִϾî 5±â ¸ðÁý     lrtk
06/17 4269
1571   [ÆÁ] ÆÄÀ̽ã 2¼Ò½º¸¦ 3À¸·Î º¯°æÇØÁÖ´Â »çÀÌÆ®[3]     ÇѽÂÀç
05/13 3973
1570   ±¸±Û ¹é¸µÅ© ÀÛ¾÷ Áú¹®¿ä     wkatnxka
03/30 3403
1569   [ÆÁ] ¿ìºÐÅõ ¹Ì·¯¸µ¼­¹ö     ÇѽÂÀç
03/09 4098
1568 ºñ¹Ð±ÛÀÔ´Ï´Ù  °¨À»¸øÀâ°Ú³×¿ä¤Ì¤Ì     À×À×À×
01/15 3
1567   µ¥ºñ¾È °è¿­ ¸®´ª½º ÀÇÁ¸¼º ±úÁ³À»¶§ ÇØ°á¹ý     ÇѽÂÀç
11/27 4590
1566   È«º¸ÇÕ´Ï´Ù. ½Å»ý º¸¾ÈÄ¿¹Â´ÏƼÀÔ´Ï´Ù.     kimwoojin0952
10/26 4310
1565   ½Å±âÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î[3]     koreal33t
09/06 4705
1564   À©µµ¿ì,¸®´ª½º¿¡¼­ ³» ip¸¦ È®ÀÎÇØ º¸ÀÚ [1]     koreal33t
09/06 3907
1563   CTF »çÀÌÆ®[1]     koreal33t
09/06 4568
1562   ÀÚ°ÝÁõ (¹®Á¦)»çÀÌÆ® [2]     koreal33t
09/06 4384
1 [2][3][4][5][6][7][8][9][10]..[80]

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