6/6 dynamic allocation
● new, delete를 이용한 동적 메모리 할당 :
c++은 세가지 기본타입의 메모리 할당을 지원한다..
· 정적 메모리 할당 : 정적 변수와 전역변수에 대해 발생. 프로그램이 실행될 때 한번 할당되며, 프로그램이 끝나기 전까지 수명을 유지한다.
· 자동 메모리 할당 : 함수 매개변수와 지역변수에 대해 발생한다. 관련 블록을 입력할 때 할당되고, 블록을 종료할 때 필요에 따라 해제된다.
· 동적 메모리 할당 : 앞으로 설명할 것
정적 할당, 자동 할당의 공통점 : 변수/배열의 크기는 컴파일 타임에 알아야 하며 메모리 할당, 해제가 자동으로 수행된다.
char name[25];
Record record[500];
Monster monster[40];
Polygon rendering[30000];
이러한 방식의 선언은 낭비되는 메모리가 많다.
new와 delete 연산자는 동적으로 메모리를 할당하고 해제하는 연산자이다.
T* ptr = new T;
T : 객체의 타입
ptr : 동적으로 할당된 객체를 가리키는 포인터
new : 객체의 생성자를 호출하여 메모리를 할당하고 초기화
배열의 경우
T*ptr = new T[size];
delete 사용법
delete ptr;
배열의 경우
delete[] ptr;
예시
int* ptr = new int;
*ptr = 10;
int *arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
delete ptr;
delete[] ptr;
new로 할당된 메모리는 delete로 해제해야 메모리 누수를 방지할 수 있다. delete로 해제한 메모리에 접근하면 undefined behavior
● 지역배열과 전역배열
변수에 전역변수, 정적변수, 지역변수가 있듯이 배열도 전역배열, 정적배열, 지역배열이 있다. 정적배열, 전역배열은 자동으로 0으로 초기화가 되고, 지역배열은 컴파일러에 따라 쓰레기값으로 채워질 수 있다.
전역배열은 어느 프로그램에서나 접근 가능하고, 여러 함수에서 공유, 다양한 함수간에 데이터를 전달하는 데 사용될 수 있다. 하지만 이는 프로그램의 복잡성과 관리의 어려움을 초래할 수 있다.
지역배열, 전역배열은 메모리 할당, 해제가 자동으로 처리되므로 명시적으로 메모리를 관리할 필요가 없다. 그러나 큰 배열이 필요하거나 동적으로 크기가 결정돼야 하는 경우 동적메모리 할당을 사용하는 것이 적절할 수 있다.
댓글남기기