Memory
- 메모리 관리는 언제나 중요한 문제다.
- 프로그램이 정확하게 실행되기 위해서는 컴파일시에 모든 변수의 주소값이 확정되어야만 한다.
- 하지만 이를 위해서는 프로그램에 많은 제약이 따르기 때문에 프로그램 실행 시에 자유롭게 할당하고 해제할 수 있는 힙(heap)이라는 공간이 따로 생겨났다.
- 하지만 이전에 컴파일러에 의해 어느정도 안정성이 보장되는 스텍(stack)과는 다르게 힙은 사용자가 스스로 제어해야 하는 부분인 만큼 책임이 따른다.
💡 힙 공간의 메모리 관리를 잘못하게 되면 프로그램 뻗는다 항상 주의할 것!!!
1. 더 이상 사용되지 않는 것은 반드시 메모리에서 해제
2. 배열과 같이 할당된 주소값을 넘어서 사용하지 않도록 주의!!!
- C언어에서는
malloc
와 free
함수를 지원하여 힙 상에서의 메모리 할당을 지원했다. C++에서도 마찬가지로 malloc
와 free
함수를 사용할 수 있다.
- 하지만 C++언어 차원에서 지원하는 것은
new
와 delete
라고 할 수 있다.
new
는 말 그대로 malloc
과 대응되는 것으로 메모리를 할당하고, delete
는 free
에 대응되는 것으로 메모리를 해제한다.
- 여기서 주의해야할 점은
delete
키워드의 사용은 new
를 통해서 할당한 공간만 가능하다.
new로 배열 할당하기
#include <iostream>
int main() {
int arr_size;
std::cout << "array size : ";
std::cin >> arr_size;
int* list = new int[arr_size];
for (int i = 0; i < arr_size; i++) {
std::cin >> list[i];
}
for (int i = 0; i < arr_size; i++) {
std::cout << i << "th element of list : " << list[i] << std::endl;
}
delete[] list;
return 0;
}
- 배열의 크기를 지정할
arr_size
변수를 선언하고 cin
을 통해 값을 입력 받아 arr_size
에 저장
new
키워드를 사용해 list
라는 이름의 int
형 배열을 선언 이 때 크기는 arr_size
의 값과 같고 배열 내부는 비어있는(엄밀히는 쓰레기값이 채워져 있는 상태)상태
- 마지막의
delete[]
는new
로 생성한 객체의 형태가 new[]
였기 때문에 이와 똑같이 delete[]로 메모리에서 해제한다. 즉 new
와 delete
는 짝을 이룬다.