안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
calloc() 과 realloc()
동적메모리를 할당 하는 방법에는 malloc() 외에 calloc()과 realloc()이 있습니다. 먼저 calloc()에 대해서 알아보겠습니다. calloc()은 다음과 같이 정의 되어 있습니다.
void *calloc(size_t count, size_t size);
calloc()은 두개의 매개 변수를 가지고 있습니다. 두개의 매개 변수는 각각 크기와 개수를 따로 받습니다. 다음은 malloc() 으로 메모리 할당하는 법과 calloc()으로 메모리를 할당하는 법을 비교 한 것입니다.
malloc(10 * sizeof(int));
calloc(10, sizeof(int));
위의 함수는 각각 10 * sizeof(int) 의 메모리를 할당한 것 입니다. 또 다른 차이는 초기화하는데 있습니다. malloc는 자동으로 초기화 하지 않지만 calloc은 메모리를 자동으로 0으로 초기화 합니다.
int *p = malloc(10 * sizeof(int));
memset(p,0,10 * sizeof(int));
malloc으로 메모리를 할당 하였을 경우 초기화를 할때 위의 코드와 같이 memset으로 초기화를 해주어야 하지만 calloc(10,sizeof(int)) 만 해주면 초기화가 된다. calloc에 초기화 하는 과정이 포함되어 있기 때문에 malloc에 비해 빠르고 간편합니다.
다음으로 realloc() 에 대해서 알아 보겠습니다. realloc() 은 기존의 메모리 크기를 늘리거나 줄일 수 있는 함수 입니다. realloc() 함수는 다음과 같이 정의 되어 있습니다.
void *realloc(void *block, size_t size);
첫 번째 매개변수는 동적으로 할당 받은 메모리의 주소이고 두 번째 매개변수로는 변경하고자 하는 메모리의 크기를 넣어 주면 됩니다. 만일 첫번째 매개 변수가 NULL이면 malloc() 처럼 동작하고 두번째 매개변수가 0이면 free() 처럼 동작 합니다.
이상으로 calloc과 realloc에 대해서 알아 보았습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 동적메모리 할당의 해제 (0) | 2017.05.17 |
---|---|
[C언어] 동적 메모리 할당 (0) | 2017.05.16 |
[C언어] 포인터(10) - 배열과 매개변수 (2) | 2017.05.15 |
[C언어] 포인터(9) - 함수와 포인터(값에 의한 호출, 참조에 의한 호출) (1) | 2017.05.11 |
[C언어] 포인터(8) - 포인터와 문자열 (1) | 2017.05.05 |