Programming Language/C++

메모리 동적 할당 new와 delete

이숨인 2023. 3. 18. 22:29

1. OS로부터 메모리를 받아오기(할당받기) - new

 

>> 주소와 값이 잘 나오는 것을 확인할 수 있다.

 

2. 할당 받은 메모리 주소를 다시 OS에게 돌려주기 **(중요) - delete

중요한 이유: 딥러닝 등 큰 프로젝트를 돌릴 때, 컴퓨터 한대로는 감당할 수 없는 데이터 양을 사용하게 된다.

메모리에, 데이터가 한 번에 안 들어갈 수 있다.

>> 일부 데이터를 가지고 작업을 하고, 그 작업이 끝난 다음에, 메모리를 OS에 돌려줬다가, 다시 메모리를 받아서 데이터를 가져오는 경우가 필요하다.

+ 여러 프로그램이 동시에 메모리를 쓰고 싶으면, 그걸 동시에 이할 수 없다 -> 급한 프로그램에게 우선적으로 많이 줬다가, 급한 일이 끝나면 다시 메모리를 받아와서 다른 프로그램에게 주면 효율적으로 쓸 수 있다.

 

❓>>  그런데, 위에서는 delete ptr을 안 했는데도 별 문제가 없었다.

 그 이유는? OS가, 해당 프로그램에게 메모리를 얼만큼 줬었는지를 기억하고 있었기 때문에 그럼.

 -> 프로그램이 종료됨과 동시에, 자동으로 걷어간거임.

->delete ptr 을 굳이굳이 써주면, 'OS가 걷어가기 전에, 제가 알아서 반납할게요~' 하는 것.(차이)

 

이 경우는, 오류가 생겨버렸다. 주소는 그대로 남아있지만, 이상한 값으로 DEREFERENCING됨

(마치, 군대 갔다와서, 원래 주소로 찾아갔더니 다른 주민이 살고있던 )

=> 가장 큰 문제임

 

❓위를 방지하는 방법: delete후에는, ptr에는 null이나 nullptr같은 값을 넣어준다.

* nullptr : 이 포인터가 가지고 있는 주소는 쓸모 없어요~ 하는 것.