반응형
1. 주요 역할 및 용도
이 매크로들은 컴파일러에게 "이 부분은 최적화를 하지 마라"고 명시적으로 명령하는 도구입니다.
- PRAGMA_DISABLE_OPTIMIZATION: 이후에 나오는 코드들에 대해 컴파일러 최적화를 끕니다.
- PRAGMA_ENABLE_OPTIMIZATION: 다시 컴파일러 최적화를 활성화합니다.
왜 최적화를 끌까요?
보통 언리얼 엔진의 Development 또는 Shipping 빌드 설정에서는 실행 속도를 높이기 위해 컴파일러가 코드를 재배치하거나 생략하는 '최적화'를 수행합니다. 이 과정에서 다음과 같은 문제가 발생합니다:
- 디버깅 중 조사식(Watch) 사용 불가: 변수가 레지스터로 옮겨지거나 최적화되어 "Variable is optimized away"라는 메시지와 함께 값을 볼 수 없게 됩니다.
- 한 줄씩 실행(Step Over) 불가: 실행 순서가 실제 소스 코드와 달라져 디버깅 포인터가 이리저리 튀는 현상이 발생합니다.
2. 사용 방법
코드의 특정 함수나 문제 구간을 감싸는 방식으로 사용합니다.
#include "MyActor.h"
// 이 함수만 디버깅하고 싶을 때
PRAGMA_DISABLE_OPTIMIZATION
void AMyActor::ComplexCalculation()
{
int32 MyValue = 10;
// 이제 여기서는 MyValue의 값을 디버거에서 정확히 확인할 수 있습니다.
MyValue += 20;
}
PRAGMA_ENABLE_OPTIMIZATION
// 이 아래부터는 다시 최적화가 적용됩니다.
void AMyActor::NormalFunction()
{
// ...
}
3. 주의사항
- 성능 저하: 최적화를 끄면 해당 구간의 코드 실행 속도가 느려집니다. 디버깅이 끝나면 반드시 매크로를 제거하거나 원래대로 되돌려야 합니다.
- 전역 적용 금지: 헤더 파일 최상단에 써서 파일 전체의 최적화를 끄는 방식은 권장되지 않습니다. 필요한 함수 단위 혹은 코드 블록 단위로만 사용하는 것이 좋습니다.
- 플랫폼 호환성: 언리얼 엔진이 제공하는 이 매크로는 내부적으로 각 컴파일러(MSVC, Clang, GCC 등)에 맞는 #pragma 구문으로 변환되므로, 플랫폼에 상관없이 안전하게 사용할 수 있습니다.
반응형
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
| TObjectPtr를 사용하는 이유 (0) | 2025.12.30 |
|---|---|
| Unreal Engine의 PrimaryAsset (0) | 2025.12.29 |
| StaticClass, TSubclassOf, CDO (0) | 2025.12.29 |
| 언리얼 엔진의 메인 스레드 구조 및 설계 철학 (1) | 2025.12.09 |
| [UE5] stat unit (2) | 2023.03.24 |