정적할당(static allocation)과 동적할당(dynamic allocation)이 존재한다.
정적할당은 컴파일 시간에 선언되어 할당 되는 것이고, 동적할당은 런타임 시간에 선언되어 메모리 공간에 할당되는 것이다.
static data의 경우 프로그램이 시작할 때 한 번 정해지게 되면 메모리 주소가 변하지 않고 프로그램에서 필요할 때 마다 해당 위치에서 호출해서 사용 가능하다.
automatic data의 경우 함수가 실행될 경우 자동으로 생성되고 함수가 끝나게 되면 자동으로 삭제되는 데이터를 의미한다.
dynamic data의 경우 new를 통해서 런타임 도중에 할당할 메모리 주소를 지정해주고 delete를 하기 전까지 해당 위치를 계속 잡고 있는다.
동적 할당의 예시로 다음과 같이 볼 수 있다.
char* ptr;
ptr = new char;
*ptr = 'B';
std::cout << *ptr;
delete ptr;
처음 char* ptr에서 ptr이라는 포인터 변수의 이름으로 주소를 할당 받는다.
그리고 new를 통해 메모리 어딘가에 ptr이 가르키는 주소를 런타임 시간에 할당한다.
그리고 ptr이 가르키는 주소에 해당하는 값으로 'B'를 입력하는 과정이다.
그리고 사용이 끝나면 마지막에 delete를 통해 ptr에 할당된 부분을 삭제하여 메모리 누수를 방지한다.
'컴퓨터 > 자료구조' 카테고리의 다른 글
자료구조 - Linked List(Stack & Queue) (1) | 2023.11.23 |
---|---|
자료구조 - Queue (2) | 2023.11.22 |
자료구조 - Stack (1) | 2023.11.21 |
자료구조 - Unsorted List and Sorted List (0) | 2023.11.19 |
자료구조 - 데이터 설계 및 구현 (0) | 2023.11.19 |