본문 바로가기

공부하자/Unreal4

[Ue4] Garbage Collection, Smart Pointer 정리

Garbage Collection

 

언리얼에서는 더 이상 참조되지 않거나 명시적으로 소멸 예약시킨 UObject를 주기적으로 정리하는 가비지 컬렉션 스키마를 사용한다.

가비지 컬렉션이 수행하면, 엔진은 루트 세트로부터 시작해서 알려진 UObject 레퍼런스 트리를 검색하여 참조된 오브젝트를 전부 추적하여 참조되지 않은 오브젝트를 제거한다.

 

요약:

1. 언리얼에서는 주기적으로 메모리를 정리하는 가비지 컬렉션을 수행

2. 가비지 컬렉션이 수행하면 레퍼런스 트리를 검색하여 참조된 오브젝트를 검사하여 참조되지 않은 오브젝트를 제거

 

Raw Pointer, UPROPERTY pointer, TWeakObjectPtr로 참조된 오브젝트 비교

 

raw pointer로 참조되는 오브젝트가 삭제되었을 경우

 

- GC 수행 전

삭제된 오브젝트를 참조 -> nullptr로 체크할 수 없다.

 

- GC 수행 후

해제된 메모리를 참조 -> nullptr로 체크할 수 없다.

 

 

UPROPERTY pointer로 참조되는 액터가 삭제되었을 경우

 

- GC 수행 전

삭제된 오브젝트를 참조 -> nullptr로 체크할 수 없다.

 

- GC 수행 후

nullptr로 변경 -> nullptr로 체크할 수 있다.

 

 

TWeakObjectPtr로 참조되는 오브젝트가 삭제되었을 경우

 

- GC 수행 전

nullptr로 변경 -> nullptr로 체크할 수 있다.

 

- GC 수행 후

nullptr로 변경 -> nullptr로 체크할 수 있다.

 

 

 

요약:

1. TWeakObjectPtr는 소유권이 없는 객체를 참조하기 위한 용도로 적합하다.

2. UPROPERTY pointer로 참조된 오브젝트가 삭제되었을 경우 IsPendingKill IsVaildLowLevel IsActorBeingDestroyed 등으로 삭제되었음을 체크하여야 한다.

 

 

 

 

참조:

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Objects/Optimizations/

https://algorfati.tistory.com/75

 

Memory Management (Smart Pointer, GC)

언리얼은 스마트 포인터와 가비지 컬렉터(GC)를 모두 사용하여 메모리를 관리한다. 일반적으로 네이티브한 부분에서는 스마트 포인터를 사용하고, UObject와 관련된 부분에서는 GC를 사용한다. Smar

algorfati.tistory.com

http://egloos.zum.com/sweeper/v/3205731