2022. 6. 15. 13:06ㆍ♣ C++
이번 포스팅에선 메모리 동적 할당에 대해 알아보도록 하겠습니다.
메모리 동적 할당 : 힙 영역에 할당될 메모리를 사용자가 직접 할당했다가 끊었다가 하는 활동
개발 환경 : VSCode, Windows 10
[본 포스팅은 메모리 구조에 대한 사전 지식이 필요합니다!]
기본 개발 세팅은 다음과 같습니다.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
// pointer
int num1 = 10;
int num2 = 4;
cout << "pointer 예시 \n";
return 0;
}
📌 메모리 동적 할당 (dynamic allocation)
데이터, 스택 영역에서 할당되는 메모리의 크기는 컴파일에 결정됩니다. 하지만 힙 영역의 크기는 런 타임에 사용자가 직접 결정합니다. 런 타임에 사용자가 직접 메모리를 할당받는 것을 메모리의 동적 할당이라고 합니다. 메모리 동적 할당은 힙 영역에서 이뤄집니다.
🕵️♀️ [물음] 왜 메모리 동적 할당이 필요할까요?
🦸♂️ [답변]
(1) 대용량의 데이터를 써야 할 때, 포인터로 잡았다가 사용하지 않을 때 해제시킴으로써 저장 공간 효율성을 높일 수 있습니다.
(2) 데이터, 스택 영역은 일정 범위를 넘어서면 변수가 파괴된다는 특성이 있습니다. 하지만 힙 영역의 데이터들은 할당하고 두고두고 쓸 수 있다는 점에서 효용성을 가집니다.
🎨 메모리 동적 할당 코드
1. 메모리 동적 할당은 new 연산자를 통해 처음 메모리를 열어줍니다.
타입 *변수 이름 = new 타입;
예시
int main()
{
int *ptr_num1 = new int;
*ptr_num1 = 1004;
cout << "new를 통해 동적 할당된 ptr_num1의 값은 " << *ptr_num1 << " 입니다." << endl;
cout << "new를 통해 동적 할당된 ptr_num1의 주소값은 " << ptr_num1 << " 입니다." << endl;
}
결과
new를 통해 동적 할당된 ptr_num1의 값은 1004 입니다.
new를 통해 동적 할당된 ptr_num1의 주소값은 0xfb1a88 입니다.
2. new를 통해 할당했던 메모리를 delete를 통해 다시 해제시킵니다.
할당되었던 메모리가 다시 돌아가기에, 메모리를 절약할 수 있습니다. 반드시 new 연산자를 사용한 이후에 사용되어야 하는 연산자입니다.
delete 변수 이름;
예시
int main()
{
int *ptr_num1 = new int;
*ptr_num1 = 1004;
cout << "new를 통해 동적 할당된 ptr_num1의 값은 " << *ptr_num1 << " 입니다." << endl;
cout << "new를 통해 동적 할당된 ptr_num1의 주소값은 " << ptr_num1 << " 입니다." << endl;
delete ptr_num1;
}
예시 2
int main()
{
int *ptr_num1 = new int;
*ptr_num1 = 1004;
cout << "new를 통해 동적 할당된 ptr_num1의 값은 " << *ptr_num1 << " 입니다." << endl;
cout << "new를 통해 동적 할당된 ptr_num1의 주소값은 " << ptr_num1 << " 입니다." << endl;
delete ptr_num1;
// 해제 시키고 다시 delete를 한다면?
delete ptr_num1;
}
해제시킨 후, 다시 delete 연산자를 사용하면 오류가 발생합니다. 잘 체크해서 써야 합니다.
지금까지 메모리 동적 할당에 대해 알아보았습니다.
초기 단계에선 메모리 동적 할당이 왜 필요한지 모를 수 있습니다. 하지만 가면 갈수록 그 유용성이 드러날 것입니다. 이번 포스팅은 여기까지 하겠습니다. 고생하셨습니다.
'♣ C++' 카테고리의 다른 글
[C++] 구조체(structure type) 개념 및 활용 (0) | 2022.06.17 |
---|---|
[C++] string 클래스와 메소드 (0) | 2022.06.16 |
[C++] Pointer 개념, 연산에 대해 알기 (0) | 2022.06.13 |
[C++] 1차원 배열, 다차원 배열 (0) | 2022.06.11 |
[C++] 조건문과 반복문을 활용해봅시다. (0) | 2022.06.10 |