malloc 과 calloc 는 기본적으로 힙에 메모리 영역을 할당하는 함수이다.
참고로 heap 이란 데이터 세크먼트의 끝과 스택의 상위부분 사이에 있는
당장 쓰이지 않는 영역을 말한다.
calloc 이 malloc 에 비해 다른점은 할당할 메모리의 양을 표시하는 방법이다.
calloc 은 구조체나 배열의 동적 메모리 할당을 위해 주로 사용되며
메모리 해제는 malloc 처럼 free 로 하면 된다.
calloc 은 다음과 같이 사용한다.
int *fi;
fi = (int *)calloc(5, sizeof(int));
malloc 은 다음과 같이 사용한다.
int *fi;
fi = (int *)malloc(sizeof(int) * 5));
이렇게 하면 결국 같은 뜻이 되는 것이다.
*fi = 1, *(fi + 1) = 2, *(fi + 2) = 2, ...
위처럼 사용하면 된다.
아 그리고 또 하나의 차이점은 calloc 으로 메모리를 할당하게 되면
모두 0으로 초기화 된다는 것이 malloc 과의 차이점이다.
참고로 다음처럼 매크로로 만들어서 사용해도 편리하겠다.
// malloc 매크로로 지정
#define MALLOC(p,t,s) if(!((p) = (t*)malloc(s))) { fprintf(stderr, "Insufficient memory"); exit(EXIT_FAILURE); }
// 매크로를 사용한 메모리 할당
MALLOC(pi, int, sizeof(int));
마지막으로 잊지 말아야 할 것은
항상 메모리 공간이 필요없게 되면
free(fi); 해서 해제를 해주어야 한다는 것. 잊지말도록 하자.
'dynamic memory allocation'에 해당되는 글 1건
- 2008.03.09 자료구조. malloc, calloc 사용법 (2)
댓글을 달아 주세요
calloc과 malloc의 차이점 중 중요한 것이 빠졌네요. malloc은 메모리 초기화 없이 그냥 할당하고요... calloc은 메모리 초기화를 시켜서 할당 합니다.
감사합니다^^