ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>µ¿Àû_¸Þ¸ð¸®ÇÒ´ç
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Docbook ¿ø¹®
1절. ¼Ò°³¾î¶² ¾ð¾î¸¦ ÀÌ¿ëÇØ¼ ÇÁ·Î±×·¡¹ÖÀ» ÇϵçÁö ÇÁ·Î±×·¥ÀÌ ÇÏ´Â ÁÖ¿äÇÑ ÀÓ¹«´Â °á±¹ µ¥ÀÌŸ¸¦ ÁÖ°í/¹Þ°í À̸¦ °¡°øÇÏ´Â ÀÛ¾÷ÀÌ´Ù. ÀÌ´Â »ç¶÷ÀÌ »çȸ¿¡¼ »ì¾Æ°¡±â À§ÇÑ °¡Àå ÁÖ¿äÇÑ ÀÏÀÌ ¼·Î°£ÀÇ ´ëÈÀΰͰú ¸¶Âù°¡ÁöÀÌ´Ù. »ç¶÷Àº ¼·Î ´ëȸ¦ Çϱâ À§Çؼ ´ëÈÇÒ ³»¿ëÀ» ¹Ì¸® ¾îµò°¡¿¡ ÀúÀåÇϰí ÀÖ¾î¾ß ÇÑ´Ù. »ç±³¸¦ À§ÇÑ ´ëȸ¦ À§Çؼ¶ó¸é ¸Ó¸®¿¡ ÀúÀåµÇ¾î ÀÖ´Â (ÀúÀåÀ̶ó°í ¸»ÇÏ´Ï Á» ÀÌ»óÇϱäÇÏ´Ù --;) µ¥ÀÌŸ(°æÇè)¸¦ Ȱ¿ëÇØ¼ ´ëȸ¦ ÇÏ¸é µÉ°ÍÀ̰í, ¾÷¹«»ó Áß¿äÇÑ ´ëȶó¸é, ¹Ì¸® ³ëÆ®¸¦ ÇϵçÁö ÇØ¼ ½ÇÁ¦ ´ëȶ§ Áß¿äÇÑ ³»¿ëÀ» ºüÆ®¸®Áö ¾Êµµ·Ï Áغñ¸¦ ÇØ¾ß ÇÒ°ÍÀÌ´Ù. ÇÁ·Î±×·¥µµ ¸¶Âù°¡Áö·Î ¾î¶² ¼öÇàÀ» À§Çؼ´Â µ¥ÀÌŸ¸¦ ¾îµò°¡¿¡ ÀúÀåÇØ µÎ°í ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ µ¥ÀÌŸ ÀÇ ÀúÀåÀº ¸Þ¸ð¸®°ø°£ ȤÀº µð½ºÅ© °ø°£À» ÀÌ¿ëÇÑ´Ù. À̹®¼´Â µ¥ÀÌŸÀúÀåÀ» À§Çؼ ¾î¶»°Ô ¸Þ¸ð¸® °ø°£À» ÀÌ¿ëÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇÑ ³»¿ëÀ» ´Ù·ç°í ÀÖ´Ù. 2절. ¸Þ¸ð¸® ÇÒ´ç¸Þ¸ð¸® ÇÒ´çÀ» À§ÇÑ ¹æ¹ýÀº Å©°Ô 2°¡Áö°¡ ÀÖ´Ù. Á¤Àû¸Þ¸ð¸® ÇÒ´ç°ú µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀÌ ±×°ÍÀε¥, µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» ¼³¸íÇϱâ Àü¿¡ Á¤Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 2.1절. Á¤Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ¼Static Memory Allocation À̶ó°í ºÒ¸®¿ì¸ç, ¸Þ¸ð¸®ÀÇ Å©±â°¡ ¹Ì¸® °íÁ¤½ÃÄѼ ÇÒ´çÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¸Þ¸ð¸®Å©±â¸¦ ÇÒ´çÇÏ´Â ½¬¿î ¹æ¹ýÀ¸·Î, ÇÒ´ç½ÃÄÑÁà¾ßÇÒ ¸Þ¸ð¸®ÀÇ ÇѰè Å©±â¸¦ ¸íÈ®È÷ ¾Ë°í ÀÖÀ»°æ¿ì »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§ÇÑ ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÏ´Ù°í ÇÒ¶§, ¿ì¸®´Â ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§Çؼ ¾î´ÀÁ¤µµÀÇ ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÑÁö¸¦ ´ëÃæ °è»êÇÒ¼ö ÀÖ´Ù. ÁÖ¼Ò±æÀ̰¡ ¾Æ¹«¸® ±æ¾îºÁ¾ß 256 ÀÚ¸¦ ³ÑÁö ¾ÊÀ»°ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ Á¤Àû ¸Þ¸ð¸® ÇÒ´çÀº ÇÁ·Î±×·¥ ½ÃÀ۽ÿ¡ ¹Ì¸® °íÁ¤½ÃÄѼ ÇÒ´ç½ÃÄÑ ¹ö¸°´Ù.(±×·± ÀÌÀ¯·Î Static À̶õ ´Ü¾î°¡ ºÙ´Â´Ù.)
±×·¯³ª Å©±âÀÇ ÇѰ踦 ¸íÈ®È÷ ¾Ë¼ö ÀÖÀ»°æ¿ì, µ¿Àû ¸Þ¸ð¸® ÇҴ纸´Ù »ç¿ëÇϱ⠽±°í, ¹ö±×°¡ ¹ß»ýÇÒ È®·üµµ Àû´Ù´Â ÀåÁ¡À» °¡Áö°í ÀÖ´Ù. º¸Åë ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ°Ô µÉ°æ¿ì ¾à°£ÀÇ ¸Þ¸ð¸® ³¶ºñº¸´Ù´Â ¹ö±×ÀÇ ¹ß»ýÀ» ´õÅ« ÇÁ·Î±×·¥ À§Çè¿ä¼Ò·Î »ý°¢Çϱ⠶§¹®¿¡, °¡´ÉÇÑÇÑ Á¤Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÑ´Ù. µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÒ°æ¿ì ¸Þ¸ð¸® ´©¼ö, È¥µ¿µÇ´Â Æ÷ÀÎÅÍÀÇ »ç¿ë¿¡ ÀÇÇÑ À߸øµÈ ¸Þ¸ð¸® ÂüÁ¶µî ¿©·¯°¡Áö ¹®Á¦¸¦ ¹ß»ý½Ãų¼ö Àֱ⠶§¹®ÀÌ´Ù. Æ÷ÀÎÅÍ À߸ø»ç¿ëÇØ¼ ¹ß»ýÇÏ´Â ¹®Á¦°¡ ¾ó¸¶³ª ÇÁ·Î±×·¡¸Ó¸¦ ±«·ÓÈ÷´ÂÁö´Â ¸»ÇÏÁö ¾Ê¾Æµµ Àß ¾Ë°í ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù. 2.2절. µ¿Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ¼Dynamic Memory Allocation À̶ó°í ºÒ¸®¿ì¸ç, ¸»±×´ë·Î ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ µ¿ÀûÀ¸·Î ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ÇÒ´ç½ÃÄÑÁà¾ß ÇÒ Çʿ䰡 ÀÖÀ»°æ¿ì »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î¼ °£´ÜÇÑ ¿¡µðÅÍ ÇÁ·Î±×·¥À» ¸¸µç´Ù°í ÇßÀ»¶§, º¸Åë ÆÄÀÏÀÇ ³»¿ëÀ» ¸Þ¸ð¸® »ó¿¡ ÀÐ¾î µéÀÌ°Ô µÉ°ÍÀÌ´Ù. ±×·±µ¥ ÆÄÀÏÀÇ Å©±â°¡ ¾ó¸¶°¡ µÉÁö´Â ¾Æ¹«µµ ¾Ë¼ö ¾ø´Ù. ÆÄÀÏÀÌ ÀÛÀ»°æ¿ì ±× Å©±â°¡ 0ÀÌ µÉ¼öµµ ÀÖ°ÚÁö¸¸ ÆÄÀÏÀÌ Å¬°æ¿ì ¼ö½Ê ¸Þ°¡ ¹ÙÀÌÆ® ȤÀº ±× ÀÌ»óÀÌ µÉ¼öµµ ÀÖÀ»°ÍÀ̱⠶§¹®ÀÌ´Ù. À̰æ¿ì¿¡´Â Á¤Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÒ¼ö ¾øÀ¸¸ç, ¾î¿¼ö ¾øÀÌ µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù. "¾î¿¼ö ¾øÀÌ" ¶õ ¸»À» ºÙÀÎ ÀÌÀ¯´Â µÇµµ·ÏÀÌ¸é µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÏ´Â°Í º¸´Ù´Â Á¤Àû¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÏ´Â°Ô ¿©·¯¸ð·Î ÀÌÀÍÀÌ ¸¹±â ¶§¹®ÀÌ´Ù. 2.2.1절. malloc, realloc, sizeof, memset, free2.2.1.1절. mallocµ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» À§Çؼ C ´Â ÁÖ¿äÇÑ ¸î°¡Áö ½Ã½ºÅÛ ÇÔ¼ö¿Í Ű¿öµå¸¦ Á¦°øÇÑ´Ù. ÀÌÁß malloc ´Â ¸Þ¸ð¸® »ó¿¡¼ ¿¬¼ÓµÈ ÀÏÁ¤ Å©±âÀÇ °ø°£À» ÇÒ´ç¹Þ±â À§Çؼ »ç¿ëÇÏ´Â °¡Àå ÀϹÝÀûÀÎ ÇÔ¼öÀÌ´Ù.
¸¸¾à 100 byte ÀÇ ¹®ÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£À» ÇÒ´ç¹Þ±â ¿øÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ malloc() ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÉ°ÍÀÌ´Ù.
¾Æ·¡ÀÇ ¿¹Á¦¸¦ ½ÇÇà½ÃÄѺ¸¸é Á»´õ ½±°Ô ÀÌÇØ°¡ °¡´ÉÇÒ°ÍÀÌ´Ù. ¿¹Á¦ : malloc_1.c
5 ¹øºÎÅÍ 8 ¹ø±îÁö´Â malloc()À» È£ÃâÇÔÀ¸·Î½á ¸Þ¸ð¸® ±¸¼ºÀÌ ½ÇÁ¦·Î ¾î¶»°Ô µÇ´ÂÁö¸¦ º¸¿©ÁØ´Ù. 5 ¹øÀº cp °¡ À§Ä¡ÇÑ °÷ÀÇ ÁÖ¼ÒÀÌ´Ï±î º°·Î ½Å°æ¾µÇÊ¿ä´Â ¾ø´Ù. 6 ¹øÀº malloc() ÇϱâÀü¿¡ *cp °¡ °¡¸®Å°°í ÀÖ´Â °÷ÀÇ ÁÖ¼Ò °ªÀ» º¸¿©Áִµ¥ ¸Þ¸ð¸® ÇÒ´çµÇ¾î ÀÖÁö¾ÊÀº°æ¿ìÀÌ´Ù. À§ÀÇ °æ¿ì NULL À» °¡¸®Å°°í Àִµ¥, À̰ÍÀº »óȲ¿¡ µû¶ó º¯ÇÑ´Ù. ´Ù½Ã ¸»Çؼ ¸Þ¸ð¸® ÇÒ´çÇÏÁö ¾Ê¾ÒÀ»°æ¿ì ÀÓÀÇÀÇ ¿µ¿ªÀ» °¡¸®Å²´Ù°í º¸¸é ¹«³ÇÏ´Ù. 7 ¹øÀÌ malloc()À» ÀÌ¿ëÇØ¼ ¸Þ¸ð¸® ÇÒ´çÇÑÈÄ °¡¸®Å°´Â °÷ÀÇ ÁÖ¼ÒÀε¥, malloc() ÇϱâÀü°ú ºñ±³ÇØ º¸¸é °¡¸®Å°°í ÀÖ´Â °÷ÀÇ ÁÖ¼Ò°¡ ¸íÈ®ÇÏ°Ô Á¤ÇØÁ® ÀÖÀ½À» È®ÀÎÇÒ¼ö ÀÖ´Ù. 8,9 ¹øÀº °¢°¢ buf ¿Í buf2 ¸¦ ´ëÀÔÇß´Ù.
2.2.1.1.1절. ¸Þ¸ð¸®¸¦ »ç¿ëÇϱâ À§Çؼ´Â ¹Ýµå½Ã ÇÒ´çÇØ¾ß ÇÑ´Ù.´ç¿¬ÇÑ ¾ê±âÀÌÁö¸¸ ¸Þ¸ð¸®¸¦ »ç¿ëÇϱâ À§Çؼ´Â Àû´çÇÑ °ø°£À» ÇÒ´çÇØÁÖ¾î¾ß ÇÑ´Ù. ¹Ù·Î À§ÀÇ ±×¸²¿¡¼ malloc ÇϱâÀü¿¡ *cp °¡ °¡¸®Å°´Â ÁÖ¼Ò¸¦ º¸¸é »óȲ¿¡ µû¶ó ´Þ¶óÁø´Ù°í Çß´Ù. ±×·³À¸·Î ÇÒ´çµÇÁö ¾ÊÀº Æ÷ÀÎÅÍ¿¡ µ¥ÀÌŸ¸¦ ÀÔ·ÂÇϸé ÀÓÀÇÀÇ ÁÖ¼Ò¿¡ ¾î¶² °ªÀ» ÀÔ·ÂÇÏ´Â ²ÃÀÌ µÈ´Ù. ¿îÀÌ ÁÁÀ¸¸é ÀÓÀÇÀÇ ÁÖ¼Ò ¿µ¿ª¿¡ µ¥ÀÌŸ¸¦ ÃæºÐÈ÷ ÀúÀåÇÒ °ø°£ÀÌ È®º¸µÇ¾î ÀÖ¾î¼ ¿¡·¯¾øÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¼öµµ ÀÖÁö¸¸, ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Â÷ÁöÇϰí ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ħ¹üÇÒ¼öµµ ÀÖ´Ù. ÀÌ·²°æ¿ì ¸Þ¸ð¸® ¿µ¿ª¿¡ ´ëÇÑ ¿ì¼±±ÇÀº ¸ÕÀú ȹµæÇÑ ÇÁ·Î¼¼½º¿¡°Ô ÀÖÀ½À¸·Î, Ä¿³ÎÀº ÀÌ ¸Þ¸ð¸®¿µ¿ª¿¡ µ¥ÀÌŸ¸¦ ¾²·Á°í ÇÏ´Â ÇÁ·Î¼¼½º¸¦ °Á¦ Á¾·á½Ãų°ÍÀÌ´Ù(¼¼±×¸ÕÆ® ÆúÆ® ¿¡·¯) À§¿¡¼ ¸Þ¸ð¸® ÇÒ´çÀ» ÇÏÁö ¾Ê¾ÒÀ½¿¡µµ ºÒ±¸Çϰí ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î ½ÇÇàµÇ¸é ¿îÀÌ ÁÁÀº°æ¿ì¶ó°í Çߴµ¥, »ç½Ç À̰æ¿ì´Â ¿îÀÌ ÁÁÀº°æ¿ì°¡ ¾Æ´Ï°í ¿îÀÌ ³ª»Û°æ¿ì°¡ µÈ´Ù. ¾ð¶æ º¸±â¿¡ Á¤»óÀûÀ¸·Î ½ÇÇàµÇ´Â°Í ó·³ º¸Àϼö Àֱ⠶§¹®¿¡ µð¹ö±ë ÀÛ¾÷À» ¾î·Æ°Ô ¸¸µé¼ö Àֱ⠶§¹®ÀÌ´Ù(´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» ħ¹üÇÒ °¡´É¼ºÀ» °¡Áö°í ÀÖ´Â ºÒ¿ÏÀüÇÑ ÄÚµåÀÌ´Ù). Àß µ¹´Ù°¡ ¾î´À³¯ ¾ÆÄ§¿¡ È®ÀÎÇØº¸´Ï±î ÇÁ·Î±×·¥ÀÌ Á×°Ô µÉ È®·üÀÌ ³ô´Ù. »ç¿ëÇÏ´Â ¸Þ¸ð¸®ÀÇ °ø°£ÀÌ ÀÛÀ»¼ö·Ï(Å©¸éÀº ´Ù¸¥ ¿µ¿ªÀ» ħ¹üÇÒ °¡´É¼ºÀÌ Å©´Ù) ¿î ÁÁ°Ô(³ª»Ú°Ô) Á¦´ë·Î ÀÛµ¿µÉ È®·üÀÌ Å©´Ù. ±×·¯¹Ç·Î ¾Æ·¡¿Í °°Àº ÄÚµå´Â ½É°¢ÇÏ°Ô À߸øµÈ ÄÚµåÀÌ´Ù.(¾Æ¸¶ ¾î¶²°æ¿ì¿¡´Â Á¦´ë·Î ½ÇÇàµÇ°í, ¾î¶² °æ¿ì¿¡´Â ¼¼±×¸ÕÆ® ÆúÆ®°¡ ¶³¾îÁú°ÍÀÌ´Ù)
2.2.1.2절. realloc¸Þ¸ð¸®ÀÇ Å©±â¸¦ Á¶Á¤ÇϰíÀÚ ÇÒ¶§ »ç¿ëÇÑ´Ù. ¿¡µðÅÍ ÇÁ·Î±×·¥À» ¿¹·Î µé¾îº¸ÀÚ¸é, 2°¡Áö ¸Þ¸ð¸® ÇÒ´çÀ» ÇÒ¼ö ÀÖÀ»°Çµ¥, ÆÄÀÏÀÇ Å©±â¸¦ ÀÐÀº´ÙÀ½ ÆÄÀÏÀÇ Å©±â¸¸Å Çѹø¿¡ ¸Þ¸ð¸® ÇÒ´çÀ» ÇØ¹ö¸®´Â ¹æ¹ý°ú 1024 ¹ÙÀÌÆ® Á¤µµ·Î ÇÒ´çÇϰí, ÆÄÀÏÀ» ÀоîµéÀÌ´Ù°¡ 1024 ¸¦ ÃʰúÇÏ°Ô µÇ¸é, realloc ¸¦ ÀÌ¿ëÇØ¼ 1024¸¦ ´õ ÇÒ´çÇØÁÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ¾î´À°É »ç¿ëÇϵçÁö °ü°è´Â ¾øÁö¸¸, realloc Àº ±âº»ÇൿÀÌ ¸¸¾à ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£ÀÌ ÃæºÐÇÏÁö ¾ÊÀ»°æ¿ì ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇÒ¼ö ÀÖµµ·Ï »õ·Î °ø°£À» Àâ°Ô µÇ¸ç, ÀÌ¿ÍÁß¿¡ ±âÁ¸ÀÇ µ¥ÀÌŸ°¡ º¹»çµÇ¹Ç·Î »ó´çÈ÷ ¸¹Àº ºñ¿ëÀÌ ¼Ò¸ðµÉ¼ö ÀÖ´Ù.(½ÇÁ¦ Å×½ºÆ® ÇØº¸¸é ¾Ë°ÚÁö¸¸ malloc ¿¡ ºñÇØ¼ ´«¿¡ ¶ç°Ô ¸¹Àº ½Ã°£ÀÌ ¼Ò¸ðµÈ´Ù) ¿¹Á¦ : realloc.c
2.2.1.3절. sizeofsizeof ´Â C ¿¡¼ Á¦°øÇϴ Ű¿öµå·Î ÇØ´ç ÀÚ·áÇüÀÇ Å©±â¸¦ µ¹·ÁÁØ´Ù. sizeof ´Â ¸Þ¸ð¸® ÇÒ´ç¿¡ ÀÖ¾î¼ ²Ï Áß¿äÇÑ ¿ªÇÒÀ» °¡Áø´Ù. ÀÌÀ¯´Â °¢ ÀÚ·áÇü¸¶´Ù Â÷ÁöÇÏ´Â byte Å©±â°¡ Ʋ¸®°í, °°Àº ÀÚ·áÇüÀ̶ó ÇÒÁö¶óµµ ¿î¿µÃ¼Á¦¿¡ µû¶ó ±× Å©±â°¡ ´Þ¶óÁú¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿¹¸¦µé¾î int Çü ÀÚ·á 4°³¸¦ ÀúÀåÇϱâ À§Çؼ ´ÙÀ½°ú °°ÀÌ ¸Þ¸ð¸® Å©±â¸¦ ÇÒ´çÇß´Ù°í ÇÏÀÚ.
ÀÌ·± ¹®Á¦¸¦ ¾ø¾Ö±â À§Çؼ sizeof Ű¿öµå¸¦ Á¦°ø¹Þ¾Æ¼ »ç¿ëÇÑ´Ù. ÀÌ Å°¿öµå¸¦ »ç¿ëÇÏ¸é ¿î¿µÃ¼Á¦¿¡¼ »ç¿ëÇÏ´Â ÀÚ·áÇüÀÇ Å©±â¸¦ µ¹·ÁÁÖ°Ô µÊÀ¸·Î À§¿¡¼¿Í °°Àº ¹®Á¦Á¡ÀÌ ¹ß»ýÇÏÁö ¾Ê´Â´Ù.
2.2.1.4절. freemalloc() Àº ¸Þ¸ð¸® ÇÒ´çÀ» Ä¿³Î¿¡ ¿äûÇÏ´Â ½Ã½ºÅÛ ÇÔ¼öÀÌ´Ù. ±×·¯¹Ç·Î ÀÏ´Ü malloc()¿¡ ÀÇÇØ¼ ÇÒ´ç¹ÞÀº ¸Þ¸ð¸®´Â ÇÁ·Î¼¼½º°¡ Á¾·áµÉ¶§±îÁö Ä¿³Î¿¡ ÀÇÇØ¼ º¸È£¹Þ°Ô µÈ´Ù. À̸»Àº malloc() ¸¦ À߸ø »ç¿ëÇÒ°æ¿ì ¾µµ¥¾ø´Â ¸Þ¸ð¸® °ø°£ÀÇ ³¶ºñ ¸¦ °¡Á® ¿Ã¼ö ÀÖÀ¸¸ç, ½É°¢ÇÒ°æ¿ì ¸Þ¸ð¸® ´©¼ö¸¦ °¡Á®¿Ã¼ö ÀÖ´Ù´Â ¶æÀ̵ȴÙ. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ warn_mem.c
±×·¯¹Ç·Î »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸®°ø°£Àº ¹Ýµå½Ã ¿î¿µÃ¼Á¦¿¡°Ô µÇµ¹·Á ÁÖ¾î¾ß ÇÑ´Ù. C ´Â µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ÇØÁ¦¸¦ À§Çؼ free() ¸¦ Á¦°øÇÑ´Ù. ´ÙÀ½Àº warn_mem.c ÀÇ ¸Þ¸ð¸® ´©¼ö ¹®Á¦¸¦ free() ¸¦ ÅëÇØ¼ ÇØ°áÇÑ ÄÚµåÀÌ´Ù. free_mem.c
3절. µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀÇ ÀÀ¿ëÀ̹øÀå¿¡¼´Â µ¿Àû¸Þ¸ð¸® ÇÒ´çÀÇ ÀÀ¿ë ¿¹Á¦¸¦ ¸¸µé¾î º¼°ÍÀÌ´Ù. ¸¸µé ÀÀ¿ë ¿¹Á¦´Â linked list ÀÌ´Ù. 3.1절. ¸µÅ©µå ¸®½ºÆ® ¿¡ ´ëÇØ¼¸µÅ©µå ¸®½ºÆ®´Â ±×¸® °£´ÜÈ÷ ´Ù·ê¼ö ÀÖ´Â ÁÖÁ¦°¡ ¾Æ´Ï´Ù. ¸µÅ©µå ¸®½ºÆ®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ÀڷᱸÁ¶¸¦ ´Ù·ê ±âȸ°¡ ÀÖÀ¸¸é ±×¶§ Çϱâ·Î Çϰí, ¿©±â¿¡¼´Â °³³äÁ¤µµ¸¸ ¼³¸íÇϵµ·Ï ÇϰڴÙ. ¸µÅ©µå ¸®½ºÆ®´Â ¸»±×´ë·Î ¸®½ºÆ®¸¦ ¸¸µé±â À§Çؼ »ç¿ëµÇ´Â ÀڷᱸÁ¶ÀÌ´Ù. ¸®½ºÆ®¸¦ ¸¸µé±â À§Çؼ´Â ÀÚ·áÀÇ ¿¬¼ÓµÈ ¼ø¼¸¦ ¸¸µé¾î Áà¾ß ÇÑ´Ù. ±×·²·Á¸é ´ÙÀ½ÀÚ·áÀÇ Á¤º¸°¡ ¹«¾ùÀÎÁö¸¦ ¾Ë¾Æ¾ß Çϴµ¥, ¸µÅ©µå ¸®½ºÆ®¶õ ´ÙÀ½ÀÚ·áÀÇ Á¤º¸°¡ ¹«¾ùÀÎÁö¸¦ ¾Ë°í ÀÖ´Â ±¸Á¶¸¦ ¸»ÇÑ´Ù. ¿©±â¼ ´ÙÀ½ÀÚ·áÀÇ Á¤º¸¶õ ´ÙÀ½ ÀÚ·á°¡ À§Ä¡Çϰí ÀÖ´Â ÁÖ¼ÒÀÇ °ªÀÌ µÉ°ÍÀÌ´Ù.
3.2절. µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» ÅëÇÑ ¸µÅ©µå ¸®½ºÆ®ÀÇ ±¸ÇöÀ§¿¡¼ ¸»ÇßÁö¸¸ ÀڷᱸÁ¶ ÀÚüÀÇ ¼³¸íÀ» ¸ñÀûÀÌ ¾Æ´Ñ °ü°è·Î °¡Àå ´Ü¼øÇÑ ÇüÅÂÀÇ ¸µÅ©µå ¸®½ºÆ®¸¦ ±¸ÇöÇϵµ·Ï ÇϰڴÙ. ÀÌ ¸µÅ©µå ¸®½ºÆ®´Â ´ÙÀ½°ú °°Àº ±â´ÉÀ» °¡Áø´Ù.
3.3절. ¿¹Á¦linked_list.c
´ÙÀ½Àº ÇÊÀÚÀÇ ÄÄÇ»ÅÍ¿¡¼ ½ÇÇà½ÃŲ °á°ú´Ù. ¹øÈ£´Â ¼³¸íÀ» À§Çؼ ºÙÀΰÍÀÌ´Ù.
1 ¼Ö¶ó¸®½º¿¡¼ÀÇ ¸Þ¸ð¸® ÇÒ´ç
#include <stdio.h> #include <stdlib.h> #define MAX (1024*1024)*1024 #define ALERT(funct, funct2, line) { \ printf("Executed %s function. (in %s function. %d line)\n", \ funct, funct2, line); \ } int main() { char *buf; sleep(5); ALERT("malloc", __FUNCTION__, __LINE__); buf = (char*)malloc(MAX); sleep(5); ALERT("free", __FUNCTION__, __LINE__); free(buf); sleep(5); ALERT("exit", __FUNCTION__, __LINE__); exit(0); }
OS ȯ°æÀº SunOS 5.8 i86 À̸ç, »ç¾çÀº 320 RAM, intel Pentium 3 800, LG IBM ³ëÆ®ºÏ, ÄÄÆÄÀÏ·¯´Â GNU gcc ¹öÀü 2.95(20010315 release) ¹öÀüÀÌ´Ù. bash-2.03# uname -a; gcc -v SunOS indra 5.8 Generic_108529-16 i86pc i386 i86pc Reading specs from /usr/local/lib/gcc-lib/i386-pc-solaris2.8/2.95.3/specs gcc version 2.95.3 20010315 (release) bash-2.03#
À§ÀÇ Äڵ带 ÄÄÆÄÀÏ ÇÏ¿© ¹é±×¶ó¿îµå·Î ½ÇÇàÇÏ¸é¼ vmstat ¸í·ÉÀ» ÀÌ¿ë, ¸Þ¸ð¸® ÇÒ´ç ºÎºÐ¿¡ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù. bash-2.03# cc -o free free.c bash-2.03# ./free [1] 18777 bash-2.03# vmstat 1 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr cd -- -- -- in sy cs us sy id 0 0 0 1270732 247888 29 247 4 0 0 0 0 1 0 0 0 131 1368 306 5 3 92 0 0 0 1269968 239636 59 515 0 0 0 0 0 0 0 0 0 121 2540 553 8 7 85 0 0 0 1269968 239616 59 509 0 0 0 0 0 0 0 0 0 124 2485 543 8 6 86 Executed malloc function. (in main function. 15 line) 0 0 0 1269968 239600 59 516 0 0 0 0 0 0 0 0 0 119 2487 539 9 5 86 0 0 0 221380 239580 59 508 0 0 0 0 0 0 0 0 0 123 2480 543 8 6 86 0 0 0 221380 239564 59 508 0 0 0 0 0 0 0 0 0 122 2476 540 10 4 86 0 0 0 221380 239552 59 508 0 0 0 0 0 0 0 0 0 120 2488 546 9 5 86 0 0 0 221380 239540 59 508 0 0 0 0 0 0 0 0 0 118 2472 534 10 4 86 Executed free function. (in main function. 18 line) 0 0 0 221380 239528 59 508 0 0 0 0 0 0 0 0 0 123 2487 542 9 6 85 0 0 0 221380 239608 59 508 0 0 0 0 0 0 0 0 0 120 2484 540 8 6 86 0 0 0 221380 239596 59 508 0 0 0 0 0 0 0 0 0 118 2474 538 9 5 86 0 0 0 221380 239584 59 508 0 0 0 0 0 0 0 0 0 124 2495 548 8 6 86 0 0 0 221380 239568 59 508 0 0 0 0 0 0 0 0 0 121 2483 543 9 5 86 Executed exit function. (in main function. 21 line) 0 0 0 221380 239556 59 508 0 0 0 0 0 0 0 0 0 122 2474 534 8 6 86 0 0 0 1270024 239624 59 508 0 0 0 0 0 0 0 0 0 122 2479 542 11 3 86 0 0 0 1270024 239612 59 508 0 0 0 0 0 0 0 0 0 118 2469 534 6 8 86 0 0 0 1270024 239600 59 508 0 0 0 0 0 0 0 0 0 118 2513 543 7 7 86 ^C [1]+ Done ./free bash-2.03#
½ÇÁ¦ÀûÀ¸·Î free() ÇÔ¼ö·Î µ¿Àû¸Þ¸ð¸® ÇÒ´çÀ» ÇØÁ¦Çß´Ù°í ÇÏ´õ¶óµµ ¾îÇø®ÄÉÀÌ¼Ç ´ÜÀ§¿¡¼´Â ÇØ´ç ¸Þ¸ð¸®¸¦ ±×´ë·Î °¡Áö°í Àִ°ÍÀ¸·Î ³ªÅ¸³µ´Ù.
°°Àº Äڵ带 °¡Áö°í RedHat linux ¹èÆ÷ÆÇ¿¡¼ test ¸¦ ÇØº¸¾Ò´Ù. OS ȯ°æÀº RH 8.0, gcc ¹öÀüÀº 3.2(20020903 release) ¹öÀüÀÌ´Ù. indra@ ~test> ./free [1] 25255 indra@ ~test> while :; do ps -aux | grep "./free"; sleep 1 ; done indra 25255 0.0 0.0 1308 216 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.0 1308 216 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.0 1308 216 pts/5 S 13:07 0:00 ./free Executed malloc function. (in main function. 15 line) indra 25255 0.0 0.1 1049892 312 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1049892 312 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1049892 312 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1049892 312 pts/5 S 13:07 0:00 ./free Executed free function. (in main function. 18 line) indra 25255 0.0 0.1 1312 308 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1312 308 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1312 308 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1312 308 pts/5 S 13:07 0:00 ./free indra 25255 0.0 0.1 1312 308 pts/5 S 13:07 0:00 ./free Executed exit function. (in main function. 21 line) [1]+ Done ./free ^C indra@ ~test>
SunOS ¿¡¼ÀÇ ¸Þ¸ð¸® °ü¸®°¡ user ÀÇ ´«À¸·Î º¸À̴°͸¸ ´Ù¸¥°ÍÀÎÁö ¾Æ´Ï¸é ½ÇÁ¦ free() ÈÄ ¸Þ¸ð¸® °ü¸®°¡ È¿À²¼ºÀ» À§ÇÑ Ãø¸éÀ¸·Î ´Ù¸¥ OS ¿Í °ü¸®Ã¼°è°¡ ´Ù¸¥Áö´Â ¾ÆÁ÷±îÁö ºÒ ºÐ¸í ÇÏ´Ù.
ÀÌ¿¡ ´ëÇÑ yundream ´ÔÀÇ ´äº¯:
http://www.joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=28365&forum=1&2
¼Ö¶ó¸®½º ¿î¿µÃ¼Á¦¿¡¼ Å×½ºÆ® ÇѰŠ¾Æ´Õ´Ï±î ? ¸®´ª½º»ó¿¡¼´Â free ÇßÀ»°æ¿ì Á¦´ë·Î ÇØÁ¦°¡ µÇ´Âµ¥, ¼Ö¶ó¸®½º¿¡¼´Â ÇØÁ¦°¡ ¾ÈµÇ´õ±º¿ä. Á¤È®È÷ ¸»ÇÏ¸é ¾ÈµÇ´Â°Íó·³ º¸Àδٰí ÇØ¾ß Á¤È®ÇÑ Ç¥ÇöÀÏµí ½ÍÀºµ¥,
Àúµµ ¿¹Àü¿¡ ¼Ö¶ó¿¡¼ ÀÛ¾÷ÇÏ´Ù°¡, malloc ÈÄ free °¡ ¾ÈµÇ´Â ¹®Á¦·Î ²Ï °í¹ÎÀ» ÇÑÀûÀÌ ÀÖ¾ú½À´Ï´Ù. ¸î¸î ¹®¼¸¦ ã¾ÆºÃ´õ´Ï, ¸Þ¸ð¸®°ü·ÃÀÛ¾÷ ¾ÈÁ¤¼ºÀ» È®º¸Çϱâ À§Çؼ¶ó°í µÇ¾î ÀÖ´Â°Í °°±â´Â ÇÏ´øµ¥ È®½ÇÈ÷´Â Àß ¸ð¸£°Ú½À´Ï´Ù.
¾î¶µç Àú°Í¶§¹®¿¡ ¸Þ¸ð¸® ´©¼ö¿Í °°Àº ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. ¼Ö¶ó¿¡¼ ¸Þ¸ð¸®°ü¸®¸¦ ¾î¶»°Ô ÇÏ´ÂÁöÁ» ¾Ë¾ÆºÁ¾ß °Ú³×¿ä.
Àú¹®Á¦·Î °¡²û Â¥Áõ³¯¶§°¡ Àִµ¥, ¾î¶² ÀÌÀ¯·Î ÀϽÃÀûÀ¸·Î ÇÑ 100¸Þ°¡ ÀÌ»ó ¸Þ¸ð¸®¸¦ Àâ¾Æ¼ ¾²°ÔµÇ¾ú´Ù¸é free¸¦ ÇØµµ ps »ó¿¡¼´Â 100¸Þ°¡¸¦ ±×´ë·Î Àâ°í Àִ°ɷΠº¸À̱⠶§¹®¿¡, ÇÁ·Î±×·¡¸Ó ÀÔÀå¿¡¼´Â ¹®Á¦°¡ µÇÁö ¾Ê°ÚÁö¸¸, °¡²û °í°´¿¡°Ô ÇÁ·Î±×·¥À» Á¦°øÇÒ¶§ ¹®Á¦°¡ µÉ¼öµµ ÀÖÁÒ. "¿Ö ÀÌ·¸°Ô ¸Þ¸ð¸®¸¦ ¸¹ÀÌ Àâ¾Æ¸Ô¾î¿ä? ¹®Á¦ Àִ°Š¾Æ´Ñ°¡¿ä?" ÀÌ·± ¹®Á¦°¡ ¹ß»ýÇÒ¼ö ÀÖ½À´Ï´Ù. ¼³¸íÀ» ÇØµµ ½±°Ô ³³µæÀ» ÇÏÁö ¸øÇÏÁÒ.
¸¶Áö¸·À¸·Î realloc() À» ÅëÇÑ ¸Þ¸ð¸® Àç ÇÒ´çÀ» test ÇÏ¿© º¸¾Ò´Ù.
linux ¿¡¼´Â realloc() À» »ç¿ë½Ã, ¸Þ¸ð¸® »çÀÌÁî°¡ Àç ¼³Á¤µÇ´Â ¾ç»óÀ» º¸¿´Áö¸¸ SunOS ¿¡¼´Â ¿ª½Ã óÀ½ malloc() À¸·Î ÇÒ´çµÈ ¸Þ¸ð¸® »çÀÌÁ À¯ÁöÇϰí ÀÖ¾ú´Ù. #include <stdio.h> #include <stdlib.h> #define MAX (1024*1024)*1024 #define ALERT(funct, funct2, line) { \ printf("Executed %s function. (in %s function. %d line)\n", \ funct, funct2, line); \ } int main() { char *buf; sleep(5); ALERT("malloc", __FUNCTION__, __LINE__); buf = (char*)malloc(MAX); sleep(5); ALERT("realloc", __FUNCTION__, __LINE__); buf = (char*)realloc(buf, 1024*1024); sleep(5); ALERT("free", __FUNCTION__, __LINE__); free(buf); sleep(5); ALERT("exit", __FUNCTION__, __LINE__); exit(0); } indra@ ~test> ./free [1] 25389 indra@ ~test> while :; do ps -aux | grep "./free"; sleep 1 ; done indra 25389 0.0 0.0 1308 216 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.0 1308 216 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.0 1308 216 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.0 1308 216 pts/5 S 13:29 0:00 ./free Executed malloc function. (in main function. 15 line) indra 25389 0.0 0.1 1049892 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1049892 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1049892 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1049892 312 pts/5 S 13:29 0:00 ./free Executed realloc function. (in main function. 18 line) indra 25389 0.0 0.1 2340 316 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 2340 316 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 2340 316 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 2340 316 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 2340 316 pts/5 S 13:29 0:00 ./free Executed free function. (in main function. 21 line) indra 25389 0.0 0.1 1312 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1312 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1312 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1312 312 pts/5 S 13:29 0:00 ./free indra 25389 0.0 0.1 1312 312 pts/5 S 13:29 0:00 ./free Executed exit function. (in main function. 24 line) [1]+ Done ./free ^C indra@ ~test> |
|
||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|