[C/C++] 메모리 할당(malloc, calloc, realoc, free)
C언어에서는 메모리를 할당할 때가 있습니다. 그때 사용하는 함수들입니다. allocation이 할당이라는 뜻을 가지고 있기에 함수의 이름으로 의미를 파악할 수 있습니다. <stdlib.h> 헤더파일에 있으며 다음과 같습니다.
- malloc (memory allocation - 메모리 할당) : 메모리를 할당한다.
- calloc (contiguous allocation - 연속 할당) : 메모리를 할당 및 초기화한다.
- realloc (resize allocation - 할당 크기 조절) : 메모리를 추가 할당한다.
- free : 메모리를 할당을 해제한다.
각각의 함수와 예시를 살펴보면 다음과 같습니다.
void *malloc(size_t size);
매개변수로 메모리의 크기를 전달받으며, 이 크기만큼 메모리가 할당된다. 보통 배열과 관련된 변수를 동적으로 할당할 때 쓰인다. 배열의 크기를 변수로 정할 수 없다. 따라서 프로그램 실행 중에 배열의 크기가 결정되는 경우에는 동적으로 메모리를 할당한다. 개발자가 어떤 자료 형태로 메모리를 할당할지 모르기 때문에 void *으로 정해졌고, 이는 개발자가 (int *)와 같은 형태로 사용할 자료형을 정해주면 된다.
int *numAllocArr = (int *)malloc(sizeof(int) * n);
void *calloc(size_t nelem, sizeo_t elsize);
calloc 함수는 배열 요소의 개수와 배열 요소의 사이즈를 매개변수로 받고 있다. 다만 malloc 과의 차이점은 모두 0으로 초기화 시킨다는 것이다.
int *numAllocArr = (int *)calloc(n,sizeof(int));
void *realloc(void *ptr, size_t size);
realloc은 원래 할당된 메모리의 크기를 변경할 때 사용한다. 첫 번째 매개변수에는 변수 이름을 넣고, 두 번째는 변경할 크기를 넣어준다.
int *numAllocArr = (int *)malloc(sizeof(int) * n);
realloc(numAllocArr, sizeof(int) * 2 * n);
void free(void* ptr);
할당된 메모리를 매개변수로 넣고 사용하면, 메모리가 해제됩니다. 할당을 하고 해제하지 않으면, 메모리 누수(메모리 낭비)가 있을 수 있으니, 놓치지 않도록 합니다.
int *numAllocArr = (int *)malloc(sizeof(int) * n);
free(numAllocArr);
'개발 > C와 C++' 카테고리의 다른 글
[c/c++] PSTR(), F() 플래시 메모리에 값 저장 (0) | 2022.10.30 |
---|---|
[c/c++] #pragma once, 헤더파일 중복 피하기 (0) | 2022.10.02 |
[C/C++] -> 화살표 연산자와 . 도트(멤버) 연산자 차이점과 사용 (0) | 2022.09.03 |
[C/C++ Error] switch quantity not an integer (0) | 2022.09.01 |