내일배움캠프-언리얼

[내일배움캠프 - 언리얼] DAY 14 - 메모리 관리하기

이시보 2025. 12. 16. 20:12

스택 메모리 (stack)

일반 변수들은 대부분 스택 메모리 공간을 차지한다.

가장 큰 특징은 변수의 생존주기가 끝나면 할당되었던 메모리가 자동으로 회수된다.

 

단점으로는 할당 가능한 스택 메모리의 크기가 제한적이고, 변수의 생존 영역을 벗어나면 자동으로 해제되므로 메모리를 더 길거나 유연하게 관리하기 어렵다.

 

힙 메모리 (heap)

동적 할당시 new 연산자를 사용하고 해제시 delete 연산자를 사용한다.

자동으로 해제되지 않으므로 메모리 누수 등의 위험이 있다.

생존 주기가 사용자가 delete로 해제하기 전까지 유지된다.

댕글링 포인터 (dangling pointer)

이미 해제된 메모리의 주소를 계속 가지고 있는 포인터를 말한다.

메모리 누수 (memory leak)

동적으로 할당한 메모리를 사용한 후 제대로 해제하지 않으면 계속해서 사용하지 않는 메모리가 쌓이게 되는 것을 말한다.

스마트 포인터

new, delete를 사용하지 않는 자동 메모리 관리 포인터이다.

  • unique pointer : 객체 소유권을 관리하는 포인터로 단 하나의 포인터만 객체를 소유할 수 있다.
  • shared pointer : 하나의 객체를 여러 개의 포인터가 함께 참조할 수 있는 포인터
  • weak pointer : 레퍼런스 카운트를 증가시키지 않는 약한 참조방식으로 동작하는 포인터

얕은 복사

 

깊은 복사

 

언리얼엔진의 메모리 관리

언리얼 엔진은 가비지 컬렉션 시스템으로 메모리 관리에 도움을 준다.

- 더 이상 프로그램에서 사용하지 않는다고 판단되는 UObject들을 식별하여 메모리에서 제거한다.

언리얼 엔진의 리플렉션 시스템

리플렉션이란 프로그램이 실행 중일 때 자신의 구조와 상태를 검사하고 수정할 수 있는 능력을 말한다.

c++에는 자체적인 리플렉션 기능이 없기 때문에 언리얼 엔진은 자체적인 리플렉션 시스템을 구축한다.

 

리플렉션 시스템은 글로만 공부하니 아직 이해가 완벽히 되지 않아서 나중에 언리얼로 직접 다뤄봐야할 것 같다.