참고 자료
- MS Learn
🖐️[C언어] 동적 할당(malloc, calloc, realloc)
동적 할당에 대해서는 아래의 게시글 참고
[자료구조] 동적 메모리 할당
☑️ 동적 메모리 할당동적 메모리 할당은 C언어에만 한정된 개념이 아니라, 다양한 프로그래밍 언어에서도 사용되고 있는 개념이다. 동적 메모리 할당의 내용과 사용 방법 자체는 어렵지 않다.
taeyeokim.tistory.com
☑️ malloc
// 함수 원형
void *malloc(
size_t size
);
// 사용 방법
int* arr = (int*)malloc(5 * sizeof(int));
size만큼의 값을 할당한다. 메모리 상에 공간이 없을 경우, NULL을 반환하고 할당이 정상적으로 이루어졌을 경우, 할당된 공간의 포인터를 반환한다.
☑️ calloc
// 함수 원형
void* calloc(
size_t number,
size_t size
);
// 사용 방법
int* arr = (int*)calloc(5, sizeof(int));
malloc 함수와 동일하게 이루어진다. 단, 전달 인자는 2개로 할당할 공간의 개수와 할당 기준 값을 추가하면 된다. 이때, size나 number에 0을 전달하면 Unique Pointer를 전달하는데, 이 값에 Read/Write를 시도할 경우 정해지지 않은 동작(예상치 못한 동작들)이 나타난다.
malloc 함수와 다른 차이점은 calloc 함수는 할당되는 공간을 0으로 초기화한다는 것이다. 이로인해서 malloc 함수나 realloc 함수에 비해서는 속도가 느리다.
☑️ realloc
// 함수 원형
void* realloc(
void* memblock,
size_t size
);
// 사용 방법
int* arr = (int*)realloc(arr, 7 * sizeof(int));
내부적으로는 malloc 함수와 같은 원리로 메모리를 할당한다. realloc 함수는 이미 동적 할당된 변수들의 공간을 추가적으로 최대한 연속적이게 할당시킴으로서 메모리 단편화를 최대한 줄인다. 만약 메모리 공간에 할당 할 수 없으면 NULL 값을 반환한다.
'언어 > C' 카테고리의 다른 글
[C언어] 포인터(Pointer) (0) | 2024.10.07 |
---|