<aside> 🧑💻 강의의 주요적인 목표
언리얼 엔진의 메모리 관리방식을 파악하고 언리얼 오브젝트의 메모리를 관리해보자.
언리얼 엔진의 메모리 관리 시스템의 이해
안정적으로 언리얼 오브젝트 포인터를 관리하는 방법을 배워본다.
</aside>
<aside> 🧑💻 C++ 메모리 관리의 문제점 (솔직히 이거는 어우.. 할말 하않..)
C++은 저수준으로 메모리 주소에 직접 접근하는 포인터를 이용해서 관리함.
그렇다보니까 new delete를 짝을 해줘야 함. ⇒ 안해주면 Memory Leak.. 프로그램 BOOM
이거 못지키면 문제가 많음.
잘못된 포인터 사용 예시
메모리 누수 : new 하고 반환을 안해준 경우 (도서관에서 책 빌리고 반납 안 한 경우)
Heap에 그대로 남아 있음.
허상 포인터 : 이미 해제한 것을 또 가리키고 있는 것 (책 반납했는데, 난 빌리고 있는 줄)

(있었는데요? 없었습니다.)
와일드 포인터 : 값이 초기화되지 않아서 엉뚱한 주소를 가리킨다.
잘못된 포인터는 다양한 문제를 일으키며 한번의 실수는 프로그램을 종료시킨다.

(출처 : https://answers.microsoft.com/ko-kr/windows/forum/all/window10에서-게임/dc339557-eaee-442c-81d4-d76474e7f010)
게임 동작하는데 예전에 이런거 많이 봤듯이.. 근데 사실 꺼지는 게 다행이지.
안꺼지고 클라에 영향이 간다면?
(더 이상의 설명은 생략한다.)
게임 규모가 커지고 복잡해지는 만큼 프로그래머가 실수할 확률이 증가한다.
그래서.
Java랑 C#은 이런 문제를 고치기 위해서 포인터를 버리고 가비지 컬렉션을 도입.
</aside>
프로그램에서 더이상 사용하지 않는다고 생각하면 알아서 메모리를 회수하는 시스템.
(알기로는 프로그램인걸로 알고 있음 이거도)
동적으로 생성된 모든 오브젝트의 정보를 모아둔 저장소를 사용하여 사용되지 않는 메모리를 추적한다.
마크 스윕의 방식.

요런 형태인데,
엄밀히 말하면 술래잡기를 하듯이 터치터치 하다가 터치 안된 것들을 날려버리는 것임.
그래서 Mark and Sweep (근데 이거 운영체제 시간에서, 캐시에서 본 듯해 보이는데 비슷해보여.)
마크-스윕의 방식으로 GC를 구축한다.
지정된 주기마다 몰아서 없애는 방식으로 동작 (GCCycle = 60초)
어찌되었던 GC도 프로그램 일종이라서 동작부하가 좀 있음.
그래서 성능 향상을 위해서 병렬처리 클러스터링 같은 기능을 탑재한다.
