1. 동적 메모리 관리(할당,해제)
ㅇ 컴파일시 메모리 공간을 확정하지 않고, 실행시 동적으로 처리
- 원하는 시점에 원하는 만큼의 메모리 할당 처리
ㅇ [참고] 실행 관점에서, 메모리 상에 일시적으로 데이터를 기억해두는 영역의 구분
- 스택 메모리 : auto 자동 변수일 경우, 스택 메모리에 생성됨 (동적 자동 메모리)
- 힙 메모리 : malloc 함수의 경우, 힙 메모리에 생성됨 (동적 메모리 할당)
2. [C 언어] 동적 메모리 관리(할당,해제) 함수 : (stdlib.h 헤더파일)
ㅇ malloc() : 실행중에 동적으로, 1개 값 형식으로, 메모리 공간(힙 메모리)을 할당
- 인수 : 할당할 메모리 크기를, 바이트 수로 전달
- 반환 : (성공시) 할당된 메모리 공간의 첫 바이트의 포인터를 반환 (void *)
. (실패시) 만일, 메모리 부족 등으로 할당 실패시, NULL을 반환
. 항상, (void *)을 반환하므로, 캐스트 연산자 `(자료형)`를 써야 함
- 변경 : 못함
. 한 번 할당된 공간 크기는 안 바꿈
. 즉, 할당 만 가능, 초기화/변경은 할 수 없음
- 例) 포인터 = (자료형) malloc(크기)
. (int *) malloc (100*sizeof(int)); // 100개 정수 크기(통상,4)의 바이트 수
. (float *) malloc (sizeof(float)); // 1개 실수 크기(통상,4)의 바이트 수
ㅇ calloc() : malloc과 유사하나, 2개 값 형식으로, 메모리 공간을 할당
- 인수 : (개수,사이즈) 형식으로 전달받으며, 할당된 공간의 값을 모두 0으로 초기화
. 따라서, 배열을 할당하고, 이를 모두 0으로 초기화 할 때는, calloc를 쓰면 편함
ㅇ free() : 이전 할당된 메모리 공간의 해제
ㅇ realloc() : 이전 할당된 메모리 공간 크기 조정
3. [C++ 언어] 동적 메모리 관리(할당,해제) 연산자
ㅇ C 언어와 달리, 동적 메모리 할당/해제를 함수가 아닌 연산자를 사용
- C 언어는, malloc()/free() 함수를 사용
. 한편, malloc()은 할당 만 가능, 초기값 부여는 불가
- C++ 언어는, 연산자를 사용하므로, 굳이 별도 헤더 파일(stdlib.h)을 포함시킬 필요 없음
. new 및 delete 연산자
ㅇ (할당 형식) : 포인터 = new 자료형(초기값);
- 지정한 자료형의 크기 만큼 메모리를 할당하여 그 위치를 가리키는 포인터를 리턴(반환)함
- 할당 실패시에는, NULL 값을 리턴함
- 만일, 할당과 동시에 초기화하려면, 자료형 뒤 괄호()를 부가하여 그 안에 초기값을 지정함
- 한편, C 언어의 malloc 함수는, 초기화는 할 수 없고, 할당 만 가능
ㅇ (해제 형식) : delete (new가 리턴한 포인터);