[malloc 함수를 사용하는 이유: 동적배열]
malloc() 함수는 메모리를 효율적으로 사용할 수 있도록 돕는 함수입니다.
그렇다면 어떤 점에서 효율적 사용이라는 걸까요?
바로 프로그램 실행 중에 메모리를 할당하고 프로그램에서 더 이상 필요하지 않을 때는 메모리를 해제하여 메모리라는 한정된 자원을 필요할 때만 사용할 수 있게 한다는 점에서 효율적입니다.
이와 같은 동적 메모리 할당은 힙(heap)영역에서 이루어지는데 프로그램 실행 중 동적으로 크기가 변하는 데이터 가령 사용자 입력 값 및 동적배열 등을 처리할 때 유용합니다.
가령 char arr[n]과 같이 c언어에서 배열 선언 시 []안에 숫자가 아닌 변수 n을 넣을 경우 컴파일러는 배열의 크기를 알 수 없어 컴파일 시점에서 에러가 발생합니다. 동적배열을 사용할 시 필요한게 바로 malloc 함수입니다.
반면 char myArr[2001] 같이 배열을 선언하는 경우는 정적 메모리 할당이라고 하는데 컴파일 시점부터 메모리가 할당되며 할당된 메모리는 프로그램 종료 시점에 자동으로 해제됩니다. 주로 크기가 작고 고정된 데이터 입력 시 사용됩니다.
[malloc() 함수 사용법]
필요 라이브러리: stdlib.h
void *malloc(size_t size)
malloc 함수의 인자값 1개로 바이트로 계산된 메모리 크기를 넘겨주게 됩니다.
예시)
// 100개의 문자를 저장할 수 있는 메모리 할당
int size = 100;
char * ptr;
// char 포인터로 형변환 필요
// malloc() 함수는 성공 시 메모리의 시작주소 return
ptr = (char *)malloc(sizeof(char)*size);
[free() 함수 사용법]
메모리 누수를 방지하기 위해서는 malloc 사용 후 꼭 해제(free) 해줘야 합니다.
필요 라이브러리: stdlib.h
void free(void * ptr)
예시)
// free 함수 사용 시 heap 영역에서 동적할당된 메모리 제거됨
//메모리 동적할당
int *ptr;
ptr = (int*)malloc(sizeof(int)*10)
//동적할당 메모리 해제
free(ptr)
'C 언어' 카테고리의 다른 글
[C언어] 널 문자를 이용해 문자열 끝을 판단하는 함수들 (0) | 2025.04.02 |
---|---|
[c언어] printf 함수로 문자열 헥사(Hex) 값 찍어보기 (0) | 2025.01.18 |
[C언어] 컴파일 과정 (0) | 2024.06.08 |