zyeon's 작심삼일 코딩 공부
동적할당 malloc() 본문
정적 메모리 할당
프로그램이 시작 되기 전 미리 정해진 크기의 메모리를 할당 받는다.
프로그램 실행 도중 크기가 변경 될 수 없으며, 메모리 공간이 낭비될 수 있다.
동적 메모리 할당
프로그램이 실행 도중에 동적으로 메모리를 할당 받으며, 이는 히프(heap) 메모리 공간에서 할당을 받는다.
메모리를 효율적으로 관리 할 수 있으나 사용 후 메모리를 반납해 줘야한다.
malloc()
malloc 함수는 사용자가 지정한 크기만큼 메모리를 할당 한 후 메모리의 주소를 반환한다.
이 때 주소는 void * 로 반환하여 사용자가 원하는 포인터 타입으로 지정해 사용할 수 있다.
또, 메모리를 할당하는 크기의 단위는 바이트이다.
메모리가 부족할 시에는 NULL을 반환하며, 실행 시간 단축을 위해 초기화를 안한다는 특징을 가지고 있다.
int *p = (int *)malloc(100*sizeof(int)); // 정수 100개 할당
*p = 10; // 동적 배열의 첫 번 째 공간에 값 대입
*(p+1) = 20;
*(p+2) = 30;
p[3] = 40; // 배열과 같이 사용할 수 있음
p[4] = 50;
p[5] = 60;
free(p); // 동적 메모리 해제
위 코드는 malloc 함수를 통해 100개의 정수를 저장할 수 있는 공간을 할당 받고, 할당받은 공간을 사용하는 방식을 나타낸 코드이다.
동적 메모리는 * 연산자를 사용하는 방법이 있고, 배열과 같이 [] 연산자를 사용하는 방법이 있다.
일반적으로 배열처럼 생각하는 방법을 많이 사용한다.
마지막으로, 할당 받은 메모리는 free()를 사용해 메모리를 해제해줘야 한다.
calloc()
calloc 함수는 0으로 초기화 된 동적 메모리를 할당하고 싶을 때 사용한다. 다만 malloc 함수와는 다르게 바이트 단위가 아닌 항목 단위로 메모리를 할당한다.
int *p = (int *)calloc(10, sizeof(int)); // 0으로 초기화 된 동적 메모리 10*(int형) 만큼 할당
realloc()
realloc 함수는 할당 된 메모리 블록의 크기 변경할 때 사용한다. 기존의 데이터 값은 유지된다.
int *p = (int *)malloc(10*sizeof(int));
p = realloc(p, 20*sizeof(int)); //메모리 크기 변경 후 재할당
'c++ 정리' 카테고리의 다른 글
함수 포인터 (0) | 2024.08.19 |
---|---|
new delete (0) | 2024.08.09 |
문자 자료형 wchar_t (0) | 2024.06.28 |
void 포인터 (0) | 2024.06.21 |
const와 포인터 (0) | 2024.06.21 |