malloc

Autres langues

Langue: ja

Version: 1993-04-04 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

calloc, malloc, free, realloc - ưŪ¤Ê¥á¥â¥ê¤Î³ä¤êÅö¤Æ¤È²òÊü¤ò¹Ô¤¦

½ñ¼°


#include <stdlib.h>



void *calloc(size_t nmemb, size_t size);


void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);

ÀâÌÀ

calloc() ¤Ï size ¥Ð¥¤¥È¤ÎÍ×ÁÇ nmemb ¸Ä¤«¤é¤Ê¤ëÇÛÎó¤Ë¥á¥â¥ê¤ò³ä¤êÅö¤Æ¡¢ ³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤ËÂФ¹¤ë¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¥á¥â¥ê¤ÎÆâÍƤϿôÃÍ¥¼¥í (Á´¥Ó¥Ã¥È¤¬¥¼¥í¤Î¥Ð¥¤¥È) ¤Ë¥»¥Ã¥È¤µ¤ì¤ë¡£

malloc() ¤Ï size ¥Ð¥¤¥È¤ò³ä¤êÅö¤Æ¡¢ ³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤ËÂФ¹¤ë¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¥á¥â¥ê¤ÎÆâÍƤϥ¯¥ê¥¢¤µ¤ì¤Ê¤¤¡£

free() ¤Ï¥Ý¥¤¥ó¥¿ ptr ¤¬»Ø¤¹¥á¥â¥ê¶õ´Ö¤ò²òÊü¤¹¤ë¡£¤³¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢°ÊÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿ malloc(), calloc(), realloc() ¤Î¤¤¤º¤ì¤«¤¬ÊÖ¤·¤¿ÃͤǤʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¤³¤ì°Ê³°¤Î¥Ý¥¤¥ó¥¿¤ò»ØÄꤷ¤¿¤ê¡¢¤¹¤Ç¤Ë free(ptr) ¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤¿¤ê¤·¤¿¾ì¹ç¤ÎÆ°ºî¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ ptr ¤¬ NULL ¤Î¾ì¹ç¤Ë¤Ï¡¢¤Ê¤ó¤ÎÆ°ºî¤â¹Ô¤ï¤ì¤Ê¤¤¡£

realloc() ¤Ï¡¢¥Ý¥¤¥ó¥¿ ptr ¤¬¼¨¤¹¥á¥â¥ê¥Ö¥í¥Ã¥¯¤Î¥µ¥¤¥º¤òÊѹ¹¤·¤Æ size ¥Ð¥¤¥È¤Ë¤¹¤ë¡£ ¿·µì¤Î¥µ¥¤¥º¤Î¤¦¤Á¡¢¾®¤µ¤¤¤Û¤¦¤Î¥Ö¥í¥Ã¥¯¤Ë´Þ¤Þ¤ì¤ëÆâÍƤÏÊѹ¹¤µ¤ì¤Ê¤¤¡£ ¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤ÎÆâÍƤϽé´ü²½¤µ¤ì¤Ê¤¤¡£ ptr ¤¬ NULL ¤Î¾ì¹ç¤Ë¤Ï malloc(size) ¤ÈÅù²Á¤Ç¤¢¤ë¡£ size ¤¬ 0 ¤Î¾ì¹ç¤Ë¤Ï free(ptr) ¤ÈÅù²Á¤Ç¤¢¤ë¡£ ptr ¤¬ NULL °Ê³°¤Î¾ì¹ç¡¢ ptr ¤Ï°ÊÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿ malloc(), calloc(), realloc() ¤Î¤¤¤º¤ì¤«¤¬ÊÖ¤·¤¿ÃͤǤʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ptr ¤¬»Ø¤¹Îΰ褬°ÜÆ°¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ï free(ptr) ¤¬¼Â¹Ô¤µ¤ì¤ë¡£

ÊÖ¤êÃÍ

calloc() ¤È malloc() ¤ÎÊÖ¤¹Ãͤϡ¢³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£ ¤³¤ì¤Ï¤¢¤é¤æ¤ë¼ïÎà¤ÎÊÑ¿ô¤ËÂбþ¤Ç¤­¤ë¤è¤¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ¤¤¤ë¡£ ³ä¤êÅö¤ÆÍ×µá¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤Ï NULL ¤¬Ê֤롣

free() ¤ÏÃͤòÊÖ¤µ¤Ê¤¤¡£

realloc() ¤Ï¿·¤¿¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¤³¤ì¤Ï¤¢¤é¤æ¤ë¼ïÎà¤ÎÊÑ¿ô¤ËÂбþ¤Ç¤­¤ë¤è¤¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ¤ª¤ê¡¢ ptr ¤È¤Ï°Û¤Ê¤ë¤³¤È¤â¤¢¤ë¡£ ³ä¤êÅö¤ÆÍ×µá¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤Ï NULL ¤¬Ê֤롣 size ¤¬ 0 ¤Î¾ì¹ç¤Ë¤Ï¡¢NULL ¤â¤·¤¯¤Ï free() ¤ËÅϤ¹¤³¤È¤¬¤Ç¤­¤ë¥Ý¥¤¥ó¥¿¤¬Ê֤롣 realloc() ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï¡¢¸µ¤Î¥Ö¥í¥Ã¥¯¤ÏÊѹ¹¤µ¤ì¤Ê¤¤¡£ ¤Ä¤Þ¤ê¡¢²òÊü¤µ¤ì¤¿¤ê°ÜÆ°¤µ¤ì¤¿¤ê¤Ï¤·¤Ê¤¤¡£

½àµò

C89, C99.

Ãí°Õ

Unix98 ɸ½à¤Ç¤Ï¡¢ malloc(), calloc(), realloc() ¤Ï¼Â¹Ô¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ë errno ¤ò ENOMEM ¤ËÀßÄꤹ¤ë¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£ Glibc ¤Ç¤Ï¤³¤ì¤¬¼é¤é¤ì¤Æ¤¤¤ë¤³¤È¤ò²¾Äꤷ¤Æ¤¤¤ë (¤Þ¤¿¤³¤ì¤é¤Î¥ë¡¼¥Á¥ó¤Î glibc ¥Ð¡¼¥¸¥ç¥ó¤Ï¤³¤Î¤³¤È¤ò¼é¤Ã¤Æ¤¤¤ë)¡£ ¸Ä¿ÍŪ¤ËÊ̤Πmalloc ¤Î¼ÂÁõ¤ò»È¤Ã¤Æ¤¤¤Æ¡¢¤½¤Î malloc ¤¬ errno ¤òÀßÄꤷ¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¼ºÇÔ¤·¤¿ºÝ¤Ë errno ¤Ë¥¨¥é¡¼¤ÎÍýͳ¤òÀßÄꤷ¤Ê¤¤¥é¥¤¥Ö¥é¥ê¥ë¡¼¥Á¥ó¤¬¤¢¤ë¤«¤â¤·¤ì¤Ê¤¤¡£

malloc(), calloc(), realloc(), free() ¤Ë¤ª¤±¤ë»ö¸Î¤Ï¡¢ ¤Û¤È¤ó¤É¤Î¾ì¹ç¤Ï¥Ò¡¼¥×¤ÎÇ˲õ (corruption) ¤¬¸¶°ø¤Ç¤¢¤ë¡£ Î㤨¤Ð¡¢³ä¤êÅö¤Æ¤é¤ì¤¿Îΰè¤ò¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¹¤ë¡¢ Ʊ¤¸¥Ý¥¤¥ó¥¿¤ËÆóÅÙ free ¤¹¤ë¡¢¤Ê¤É¤¬¤³¤ì¤Ë¤¢¤¿¤ë¡£

ºÇ¶á¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Linux libc (5.4.23 °Ê¹ß) ¤È GNU libc (2.x) ¤Ç¤Ï¡¢ malloc ¤ÎÆ°ºî¤ò´Ä¶­ÊÑ¿ô¤Ë¤è¤Ã¤ÆÀ©¸æ¤Ç¤­¤ë¤è¤¦¤Ê¼ÂÁõ¤¬¤µ¤ì¤Æ¤¤¤ë¡£ MALLOC_CHECK_ ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢Æüì¤Ê¼ÂÁõ¤¬ÍѤ¤¤é¤ì¡¢ ñ½ã¤Ê¥¨¥é¡¼¤Ë¤ÏÂѤ¨¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ë (¸úΨ¤Ï°­¤¯¤Ê¤ë)¡£Î㤨¤Ð¡¢ free() ¤òƱ¤¸°ú¤­¿ô¤ÇÆóÅٸƤӽФ·¤Æ¤·¤Þ¤¦¡¢ 1 ¥Ð¥¤¥È¤À¤±¹Ô¤­¤¹¤®¤Æ¤·¤Þ¤¦ (off-by-one ¥Ð¥°) ¤Ê¤É¤¬¤³¤ì¤ËÅö¤¿¤ë¡£ ¤·¤«¤·¡¢¤³¤ì¤é¤Î¥¨¥é¡¼¤ÎÁ´¤Æ¤òËɤ°¤³¤È¤¬¤Ç¤­¤ë¤ï¤±¤Ç¤Ï¤Ê¤¯¡¢ ¤½¤Î¾ì¹ç¤Ë¤Ï¥á¥â¥ê¥ê¡¼¥¯¤¬µ¯¤³¤Ã¤Æ¤·¤Þ¤¦¡£ MALLOC_CHECK_ ¤¬ 0 ¤Ë¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤È¡¢¥Ò¡¼¥×¤ÎÇ˲õ¤òÌۤäÆ̵»ë¤¹¤ë¡£ 1 ¤Ë¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤È¡¢¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤¬É¸½à¥¨¥é¡¼½ÐÎϤËɽ¼¨¤µ¤ì¤ë¡£ 2 ¤Ë¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤È¡¢¤¿¤À¤Á¤Ë abort(3) ¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£2 ¤ËÀßÄꤷ¤Æ¤ª¤¤¤ÆÌò¤ËΩ¤Ä¾õ¶·¤È¤·¤Æ¤Ï¡¢ ¼ÂºÝ¤Î¥×¥í¥»¥¹¤Î¥¯¥é¥Ã¥·¥å¤¬¤º¤Ã¤È¸å¤Ëµ¯¤³¤ê¡¢ ËÜÅö¤Î¸¶°ø¤òõ¤·½Ð¤¹¤Î¤¬Èó¾ï¤Ëº¤Æñ¤Ê¾ì¹ç¤Ê¤É¤¬µó¤²¤é¤ì¤ë¤À¤í¤¦¡£

¥Ð¥°

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢Linux ¤Ï³Ú´ÑŪ¥á¥â¥êÇÛÃÖÀïά¤òÍѤ¤¤Æ¤¤¤ë¡£ ¤Ä¤Þ¤ê¡¢ malloc() ¤¬ NULL ¤Ç¤Ê¤¤ÃͤòÊÖ¤·¤Æ¤â¡¢¤½¤Î¥á¥â¥ê¤¬¼ÂºÝ¤ËÍøÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤¬ Êݾڤµ¤ì¤Ê¤¤¡£¤³¤ì¤ÏËÜÅö¤Ë¤Þ¤º¤¤¥Ð¥°¤Ç¤¢¤ë¡£ ¥·¥¹¥Æ¥à¤¬¥á¥â¥êÉÔ­¾õÂ֤ˤʤ俤Ȥ­¡¢°­Ì¾¹â¤¤¥á¥â¥êÉÔ­²ò·è´ï (OOM killer) ¤Ë¤è¤Ã¤Æ°ì¤Ä¤Þ¤¿¤ÏÊ£¿ô¤Î¥×¥í¥»¥¹¤¬ºï½ü¤µ¤ì¤ë¡£ ÆÍÁ³¤¢¤ë¥×¥í¥»¥¹¤¬ºï½ü¤µ¤ì¤ë¤Î¤¬Ë¾¤Þ¤·¤¯¤Ê¤¤¾õ¶·¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤Æ¡¢ ¤·¤«¤â¥«¡¼¥Í¥ë¤Î¥Ð¡¼¥¸¥ç¥ó¤¬½½Ê¬¤ËºÇ¶á¤Î¤â¤Î¤Ç¤¢¤ì¤Ð¡¢¤³¤Î¥á¥â¥ê¤ò ³ä¤êÅö¤Æ²á¤®¤ëÆ°ºî (overcommitting behavior) ¤ò°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ç ̵¸ú¤Ë¤Ç¤­¤ë¡£
# echo 2 > /proc/sys/vm/overcommit_memory
¥«¡¼¥Í¥ë¤ÎÉÕ°ʸ½ñ¤Î vm/overcommit-accounting ¤È sysctl/vm.txt ¤â»²¾È¤Î¤³¤È¡£

´ØÏ¢¹àÌÜ

brk(2), posix_memalign(3)