10-3-¶ó.ÀçÇÒ´ç

´ÙÀ½ ÇÔ¼ö(¾¾¾ó·ÏÀ̶ó°í Àд´Ù)´Â malloc ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇ쵂 ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ý¸¸ ´Ù¸£´Ù.

 

void *calloc( size_t num, size_t size );

 

ù ¹ø° Àμö numÀº ÇÒ´çÇÒ ¿ä¼ÒÀÇ °³¼öÀÌ°í size´Â ¿ä¼ÒÀÇ Å©±âÀÌ´Ù. mallocÀº ÇÊ¿äÇÑ ¸Þ¸ð¸®¸¦ ¹ÙÀÌÆ® ´ÜÀ§ Çϳª·Î¸¸ Àü´Þ¹ÞÁö¸¸ callocÀº µÎ °³ÀÇ °ªÀ¸·Î ³ª´©¾î Àü´Þ¹Þ´Â´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. mallocÀÌ "¸î ¹ÙÀÌÆ® ÇÒ´çÇØ ÁÖ¼¼¿ä"¶ó°í ¿äûÇÏ´Â °Í¿¡ ºñÇØ callocÀº "¸î ¹ÙÀÌƮ¥¸® ¸î °³ ÇÒ´çÇØ ÁÖ¼¼¿ä"¶ó°í ¿äûÇÏ´Â °ÍÀÌ´Ù. ±×·¡¼­ ´ÙÀ½ µÎ È£Ãâ¹®Àº µ¿ÀÏÇÏ´Ù.

 

ar=(int *)malloc(10*sizeof(int));

ar=(int *)calloc(10,sizeof(int));

 

±¸Á¶Ã¼°°Àº Å« µ¥ÀÌÅÍÀÇ ¹è¿­À» ÇÒ´çÇÒ ¶§´Â callocÀ¸·Î ÇÒ´çÇÏ´Â °ÍÀÌ ´õ º¸±â¿¡ ÁÁ°í Äڵ带 Àб⿡µµ ÁÁ´Ù. callocµµ ½ÇÁ¦ ÇÒ´çÇÏ´Â ¾çÀº size*numÀ¸·Î °è»êÇϹǷΠ»ç½Ç calloc(1,10*sizeof(int))³ª calloc(10*sizeof(int),1)À̳ª °á°ú´Â µ¿ÀÏÇÏ´Ù. ´Ù¸¸ ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» ´ÜÀ§¿Í °³¼ö·Î ³ª´©¾î Á» ´õ ³í¸®ÀûÀ¸·Î Ç¥ÇöÇÑ´Ù´Â Á¡¸¸ ´Ù¸£´Ù.

callocÀÌ malloc°ú ¶Ç ´Ù¸¥ Â÷ÀÌÁ¡Àº ¸Þ¸ð¸® ÇÒ´ç ÈÄ ÀüºÎ 0À¸·Î ÃʱâÈ­ÇÑ´Ù´Â °ÍÀÌ´Ù. mallocÀº ¸Þ¸ð¸® ÇҴ縸 ÇϹǷΠÇÒ´çµÈ ¸Þ¸ð¸®¿¡´Â ¾²·¹±â°ªÀÌ µé¾î ÀÖÁö¸¸ callocÀ¸·Î ÇÒ´çÇϸé ÇÒ´ç ÈÄ ¸ðµç ¸Þ¸ð¸®¸¦ 0À¸·Î ä¿î´Ù. ÇÒ´ç ÈÄ¿¡ ¹è¿­À» ¹Ù·Î ÃʱâÈ­ÇØ¾ß ÇÑ´Ù¸é malloc È£Ãâ ÈÄ memsetÀ» »ç¿ëÇÒ ¼öµµ ÀÖÁö¸¸ ÀÌ ¹æ¹ýº¸´Ù´Â calloc ÇÔ¼ö·Î ÇÒ´çÇÏ´Â °ÍÀÌ ´õ Æí¸®ÇÏ´Ù

´ÙÀ½ ÇÔ¼ö´Â ÀÌ¹Ì ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ¹Ù²Ù¾î ÀçÇÒ´çÇÑ´Ù. ÃÖÃÊ ÇÒ´çÇÑ Å©±âº¸´Ù ´õ Å« ¸Þ¸ð¸®°¡ ÇÊ¿äÇÒ ¶§´Â ÀÌ ÇÔ¼ö·Î Å©±â¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. ¿ø·¡ Å©±âº¸´Ù ´õ ÀÛ°Ô Ãà¼Ò ÀçÇÒ´çÇÏ´Â °Íµµ °¡´ÉÇϱâ´Â ÇÏÁö¸¸ º¸ÅëÀº È®´ë ÀçÇÒ´çÇÏ´Â °æ¿ì°¡ ¸¹´Ù.

 

void *realloc( void *memblock, size_t size );

 

ù ¹ø° Àμö·Î mallocÀ̳ª callocÀ¸·Î ÇÒ´çÇÑ ¸Þ¸ð¸®ÀÇ ½ÃÀÛ ¹øÁö¸¦ ÁÖ°í µÎ ¹ø° Àμö·Î ÀçÇÒ´çÇÒ Å©±â¸¦ Àü´ÞÇÑ´Ù. ¸¸¾à ù ¹ø° Àμö°¡ NULLÀÏ °æ¿ì, Áï ÇÒ´çµÇ¾î ÀÖÁö ¾ÊÀ» °æ¿ì´Â »õ·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇϹǷΠreallocÀÇ µ¿ÀÛÀº malloc°ú °°¾ÆÁø´Ù. µÎ ¹ø° Àμö size°¡ 0ÀÏ °æ¿ì´Â ÇÒ´çÀ» Ãë¼ÒÇ϶ó´Â ¾ê±âÀ̹ǷΠfree¿Í °°¾ÆÁø´Ù. ÀçÇÒ´ç ÈÄ¿¡ »õ·Î ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ¹øÁö¸¦ ¸®ÅÏÇϴµ¥ ÀÌ ¹øÁö´Â ¿ø·¡ ¹øÁö¿Í °°À» ¼öµµ ÀÖ°í ¾Æ´Ò ¼öµµ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î Ãà¼Ò ÀçÇÒ´çÇßÀ» ¶§´Â °°Àº ¹øÁöÀ̸ç È®´ë ÀçÇÒ´çÇßÀ» ¶§´Â ´Ù¸¥ ¹øÁö·Î À̵¿µÉ È®·üÀÌ ³ô´Ù.

¿¹¸¦ µé¾î ar ¹è¿­ÀÌ 20¹ÙÀÌÆ®¸¸Å­ ÇÒ´çµÇ¾î ÀÖ´Â »óÅ¿¡¼­ 40¹ÙÀÌÆ®·Î È®´ë ÀçÇÒ´çÇÑ´Ù°í ÇØ º¸ÀÚ. ¸¸¾à arµÚÂÊÀÇ ¸Þ¸ð¸®°¡ ºñ¾î ÀÖ´Ù¸é arÀ» 40¹ÙÀÌÆ®·Î ´Ã¸®±â¸¸ ÇÏ¸é µÇ¹Ç·Î arÀº ±× ÀÚ¸®¿¡¼­ ±æÀ̸¸ ´Ã¾î³­´Ù. ±×·¯³ª ar´ÙÀ½ÀÇ ¸Þ¸ð¸®°¡ ºñ¾î ÀÖÁö ¾Ê´Ù¸é arÀÇ À§Ä¡°¡ ¹Ù²î°Ô µÉ °ÍÀÌ´Ù.

ar ´ÙÀ½¿¡ ´Ù¸¥ º¯¼ö°¡ ÀÌ¹Ì ¸Þ¸ð¸®¸¦ Â÷ÁöÇÏ°í ÀÖÀ¸¸é ÀÌ »óÅ¿¡¼­ ar ¹è¿­ÀÇ ±æÀ̸¦ ´Ã¸± ¼ö ¾ø±â ¶§¹®¿¡ ¾î¿ ¼ö ¾øÀÌ arÀÌ È®´ëµÈ Å©±â¸¸Å­ÀÇ ¿©À¯ ¸Þ¸ð¸®°¡ ÀÖ´Â ÂÊÀ¸·Î À̻簡¾ß ÇÑ´Ù. À̶§ realloc ÇÔ¼ö´Â arÀ» À̵¿½ÃÅ°¸é¼­ ±âÁ¸ ar¿¡ µé¾î ÀÖ´ø ¸ðµç ³»¿ëÀ» ±×´ë·Î º¹»çÇϹǷΠÀçÇÒ´ç¿¡ ÀÇÇØ À§Ä¡´Â ¹Ù²î´õ¶óµµ ³»¿ëÀº ±×´ë·Î À¯ÁöµÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â realloc ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¿¹ÀÌ´Ù.

 

¿¹ Á¦ : realloc

#include <Turboc.h>

 

void main()

{

     int *ar;

 

     ar=(int *)malloc(5*sizeof(int));

     ar[4]=1234;

 

     ar=(int *)realloc(ar,10*sizeof(int));

     ar[9]=5678;

 

     printf("ar[4]=%d, ar[9]=%d\n",ar[4],ar[9]);

     free(ar);

}

 

½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

ar[4]=1234, ar[9]=5678

 

ÃÖÃÊ ar ¹è¿­À» 20¹ÙÀÌÆ® Å©±â·Î ÇÒ´çÇßÀ¸¹Ç·Î arÀº ar[0]~ar[4]±îÁöÀÇ ¿ä¼Ò¸¦ °¡Áö°Ô µÉ °ÍÀÌ´Ù. ÀÌ »óÅ¿¡¼­ ¾î¶² ÀÌÀ¯·Î arÀÌ 40¹ÙÀÌÆ®·Î È®ÀåµÇ¾î¾ß ÇÒ ÇÊ¿ä°¡ »ý°å´Ù¸é realloc ÇÔ¼ö·Î arÀÇ Å©±â¸¦ ´Ã·Á ÀçÇÒ´çÇÑ´Ù. Å©±â¸¦ È®ÀåÇϸé arÀÇ ¹øÁö°¡ ¹Ù²ð ¼ö´Â ÀÖÁö¸¸ ¿ø·¡ ¹è¿­¿¡ µé¾î ÀÖ´ø ¸ðµç °ªÀº ±×´ë·Î À¯ÁöµÈ´Ù.

µ¿Àû ÇÒ´çÀÌ ÇÊ¿äÇÑ ÀÌÀ¯´Â ÄÄÆÄÀÏÇÒ ½ÃÁ¡¿¡ ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» ¸ð¸¦ ¶§°¡ Àֱ⠶§¹®ÀÌ´Ù. ÀçÇÒ´çÀÌ ÇÊ¿äÇÑ ÀÌÀ¯´Â ½ÇÇàÁß¿¡¶óµµ ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» °¡´ÆÇÒ ¼ö ¾øÀ» ¶§°¡ Àֱ⠶§¹®ÀÌ´Ù. ±×¸® ÈçÇÏÁö´Â ¾ÊÁö¸¸ ÀçÇÒ´çÀÌ ²À ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖ´Ù. ¾î¶² °æ¿ì¿¡ ÀçÇÒ´çÀÌ ÇÊ¿äÇÑÁö ±¸Ã¼ÀûÀÎ ¿¹Á¦¸¦ º¸À̱â´Â ¾î·Æ°í ¿¹¸¸ µé¾î º¸µµ·Ï ÇÏÀÚ.

³×Æ®¿öÅ©¸¦ ÅëÇØ ÆÄÀÏÀ» Àü¼ÛÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í Çغ¸ÀÚ. ³×Æ®¿öÅ©ÀÇ ¹Ý´ëÆí¿¡¼­ º¸³»´Â ÆÄÀÏÀ» ¹Þ¾Æ¾ß Çϴµ¥ ÀÌ ÆÄÀÏÀÇ Å©±â´Â ´Ù ¹Þ¾Æ º¸±â Àü¿¡´Â ¾Ë ¼ö ¾ø´Â »óȲÀÌ´Ù. ÀÌ·² ¶§´Â ÃÖÃÊ Àû´çÇÑ Å©±â·Î ¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù. °¡·É 1M Á¤µµ¸¸ ÇÒ´çÇÑ Ã¤·Î ³×Æ®¿öÅ©·Î µé¾î¿À´Â ÆÐŶÀ» ÀÌ ¹öÆÛ¿¡ ´©Àû½ÃŲ´Ù. ±×·¯´Ù°¡ ¹ÞÀº ÆÐŶ ÃÑ·®ÀÌ 1M°¡ µÇ¸é ´Ù½Ã 1M ´õ ´Ã·Á 2M·Î ÀçÇÒ´çÇÑ´Ù. ÀÌ·± ½ÄÀ¸·Î ÆÐŶÀ» ´Ù ¹ÞÀ» ¶§±îÁö °è¼Ó ÀçÇÒ´çÇÏ¸é µÈ´Ù. ÀÌ·± »óȲÀº »ý°¢º¸´Ù ÈξÀ ´õ ÀÚÁÖ ¹ß»ýÇϴµ¥ ¾ÐÃàÀ» ÇØÁ¦ÇѴٰųª DB Äõ¸®¸¦ ½ÇÇàÇÒ ¶§µµ ÀçÇÒ´çÀÌ ÇÊ¿äÇÏ´Ù.

Âü°í·Î ´ÙÀ½ È®Àå ÇÔ¼ö¸¦ »ç¿ëÇϸé malloc, callocÀ¸·Î ÇÒ´çÇÑ ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ½ÇÇàÁß¿¡ Á¶»çÇÒ ¼ö ÀÖ´Ù. ÇÒ´çÇÑ ¸Þ¸ð¸®°¡ ÃæºÐÇÑÁö¸¦ Á¶»çÇÏ°í ½ÍÀ» ¶§ ÀÌ ÇÔ¼ö°¡ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù. Ç¥ÁØ ÇÔ¼ö´Â ¾Æ´ÏÁö¸¸ ºñÁÖ¾ó C++, Dev-C++ µî À¢¸¸ÇÑ ÄÄÆÄÀÏ·¯µéÀº ÀÌ ÇÔ¼ö¸¦ Á¦°øÇϹǷΠÀ̽ļº¿¡ ´ëÇؼ­´Â °ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

 

size_t  _msize(void *memblock);

 

¸Þ¸ð¸®¸¦ µ¿ÀûÀ¸·Î ÇÒ´çÇÏ´Â ¿©·¯ ÇÔ¼öµé¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò´Âµ¥ C ¾ð¾îÀÇ ±âº»ÀûÀÎ ¸Þ¸ð¸® ÇÒ´ç, ÇØÁ¦ ÇÔ¼ö´Â malloc, freeÀÌ´Ù. ÀÌ¿¡ ºñÇØ C++Àº malloc, free ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ´Â new, delete¶ó´Â ÇÒ´ç ¿¬»êÀÚ¸¦ µû·Î Á¦°øÇϴµ¥ ÀÌ ¿¬»êÀÚµéÀº ´Ü¼øÈ÷ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϱ⸸ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °´Ã¼ÀÇ »ý¼ºÀÚ¿Í Æı«ÀÚ¸¦ È£ÃâÇϱ⵵ ÇÑ´Ù. ÀÌ ¿¬»êÀÚ¿¡ ´ëÇؼ­´Â C++ Æí¿¡¼­ ´Ù½Ã °øºÎÇϱâ·Î ÇÏÀÚ.

¹°·Ð C++¿¡¼­µµ °´Ã¼¸¦ »ý¼ºÇÒ ¶§°¡ ¾Æ´Ï¶ó¸é malloc, free ÇÔ¼ö¸¦ ¿©ÀüÈ÷ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç new, deleteº¸´Ù ¿ÀÈ÷·Á ´õ °£ÆíÇÏ´Ù. ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼ö´Â ÀÌ ¿Ü¿¡µµ ¿î¿µÃ¼Á¦¿Í ¶óÀ̺귯¸®º°·Î ´Ù¾çÇÏ°Ô Á¦°øµÈ´Ù. ¿¹¸¦ µé¾î À©µµ¿ìÁî¿¡¼­´Â GlobalAlloc, VirtualAllocÀ̶ó´Â º°µµÀÇ ÇÒ´ç ÇÔ¼ö°¡ ÀÖ°í COM¿¡¼­´Â IMallocÀ̶ó´Â ¸Þ¸ð¸® °ü¸® Àü¿ë ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϱ⵵ ÇÑ´Ù. ÀÌ·± ÇÒ´ç ¹æ¹ý¿¡ ´ëÇؼ­´Â °ü·Ã °ú¸ñÀ» °øºÎÇÒ ¶§ ´Ù½Ã »ìÆ캸µÇ ÇÒ´çÀÇ ¿øÄ¢°ú ¹æ¹ýÀº malloc, freeÀÇ °æ¿ì¿Í °ÅÀÇ µ¿ÀÏÇÏ´Ù.