Jiyong's STUDY

calloc 함수와 realloc 함수 본문

프로그래밍/C

calloc 함수와 realloc 함수

Kingjiyong 2018. 5. 31. 05:29

동적 할당과 관련된 함수 calloc, realloc


#include <stdlib.h>

void *calloc(size_t elt_count, size_t elt_size);


calloc 함수는 malloc 함수와 비슷하면서 조금 다르다.

calloc 함수는 elt_count * elt_size 의 크기만큼 메모리의 공간을 할당하는데,

malloc 함수는 인자를 size 하나 받는다. 즉 인자의 전달 방식에서 차이가 난다.

또 하나, calloc 함수는 할당된 공간을 전부 0으로 초기화한다.

즉, malloc 함수는 초기화 하지 않고 출력을 하면 쓰레기 값이 나온다는 이야기다.


#include <stdlib.h>

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


realloc 함수는 힙 영역의 변수의 크기를 변경하는 함수이다.


realloc 함수로 변수의 크기를 늘린다면, 이미 할당되어있는 공간 뒤에 별도로 공간을 할당한다.

만약 그 뒤에 다른 변수 또는 변수들이 할당되어 있다면 그 공간의 뒤에 새로 할당을 한다.

새로 할당을 한 뒤에, 원래의 공간의 내용을 복사하여 새로 할당을 한 공간에 복사를 한다.

그 이후에, 원래의 공간은 소멸시킨다.


간단하게,


int *ptr=(int *)malloc(8);

ptr=realloc(ptr, 12);


이렇게 malloc 함수와 realloc 함수를 호출하여 크기를 늘릴 때,

공간을 새로 할당하게 된 경우라면 앞의 주소값과 뒤의 주소값은 당연하게도 다르다.


이 외에도 메모리의 효율 등 생각을 해본다면 약간의 문제점이 있는 함수이다.

꼭 필요하지 않다면 거의 쓰이지 않는 함수이다.