Jiyong's STUDY
calloc 함수와 realloc 함수 본문
동적 할당과 관련된 함수 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 함수를 호출하여 크기를 늘릴 때,
공간을 새로 할당하게 된 경우라면 앞의 주소값과 뒤의 주소값은 당연하게도 다르다.
이 외에도 메모리의 효율 등 생각을 해본다면 약간의 문제점이 있는 함수이다.
꼭 필요하지 않다면 거의 쓰이지 않는 함수이다.
'프로그래밍 > C' 카테고리의 다른 글
메모리의 동적 할당. malloc과 free (0) | 2018.05.31 |
---|---|
간단한 C언어의 메모리 구조 정리, 스택 영역 접근시 주의할 점 (0) | 2018.05.31 |
fseek, 파일 위치와 관련된 함수. (0) | 2018.05.31 |
구조체의 파일 입출력 방식 (0) | 2018.05.30 |
파일 입출력 함수 fprintf, fscanf (0) | 2018.05.30 |