KoreanFoodie's Study

[언리얼] UnrealVS 로 메모리 이슈 예방하기 (-stompMalloc) 본문

Game Dev/Unreal C++ : Dev Log

[언리얼] UnrealVS 로 메모리 이슈 예방하기 (-stompMalloc)

GoldGiver 2023. 6. 15. 14:42

[언리얼] UnrealVS 로 메모리 이슈 예방하기 (-stompMalloc)

핵심 :

1. Stomp Allocator 로 잠재적인 메모리 이슈를 잡아낼 수 있다.
2. 바인딩을 꼬리물기처럼 만들면 안된다(상위 > 중위 > 하위 위젯 순으로 열리는 경우, 같은 타입의 델리게이트가 바인딩되면 안됨)
3. stompmalloc 은 실제 가상 메모리 대신 물리 메모리 주소에 할당/해제 작업을 직접적으로 하도록 도와준다.

게임을 다 만들고 나서 실행을 했는데, 자꾸 크래시가 나서 게임이 꺼져버리면 매우 허망할 것이다.

특히 메모리 이슈의 경우, 정확히 어디서 메모리가 오염되었는지 개발 단계에서는 파악하기가 매우 어렵고 테스트 비용이 큰 편이다.

 

메모리 이슈를 디버깅하기 위한 좋은 방법이 하나 있는데, 바로 UnrealVS 를 설치하여 인자를 -stompMalloc 을 줘서 테스트하는 것이다!

 

UnrealVS

UnrealVS 는 언리얼 공식 문서에 설치 방법이 잘 나와 있으니, 참고해서 설치하도록 하자.

설치 후, 보기 > 도구 모음 > UnrealVS 를 키면 다음과 같이 툴바가 나온다 :

이제 여기 인자의 마지막에 -stompmalloc 을 붙여준 후, 테스트를 하면 된다.

 

 

-stompmalloc

그럼 이 녀석이 뭐길래 메모리를 이슈를 파악할 수 있는 것일까? 

 

간단히 요약해보면 다음과 같다 :

OS 는 가상 메모리를 사용한다. 즉, 프로그램이 메모리 할당 요청을 하면, 물리 메모리에 실제 메모리가 할당된 후 물리 메모리의 주소가 반환되는 것이 아니라 물리 메모리에 매핑된 가상 메모리가 반환된다. 따라서 다른 프로그램에서 같은 메모리 주소를 읽어도, 실제 물리 메모리 주소는 다른 것이다. 

StompMalloc 을 사용하면 메모리 할당 후 주소값을 참조할 때, 가상 메모리가 아닌 실제 물리 메모리 주소를 반환받게 된다. 그렇게 되면 실제 물리 메모리의 데이터는 오염되었는데 가상 메모리는 아직 살아 있어 결과적으로 엉뚱한 물리 메모리에 접근하여 프로그램이 오동작하는 경우를 잡아낼 수 있게 된다.

자세한 내용은 이 곳을 참조하자.

 

덧, -stompmalloc 옵션을 키면 조금 느려지긴 한다 😅

 

참고 : 언리얼 공식 문서
Comments