게임 개발/Unreal Engine 기본

PRAGMA_DISABLE_OPTIMIZATION과 PRAGMA_ENABLE_OPTIMIZATION 매크로

지노윈 2025. 12. 29. 16:29
반응형

1. 주요 역할 및 용도

이 매크로들은 컴파일러에게 "이 부분은 최적화를 하지 마라"고 명시적으로 명령하는 도구입니다.

  • PRAGMA_DISABLE_OPTIMIZATION: 이후에 나오는 코드들에 대해 컴파일러 최적화를 끕니다.
  • PRAGMA_ENABLE_OPTIMIZATION: 다시 컴파일러 최적화를 활성화합니다.

왜 최적화를 끌까요?

보통 언리얼 엔진의 Development 또는 Shipping 빌드 설정에서는 실행 속도를 높이기 위해 컴파일러가 코드를 재배치하거나 생략하는 '최적화'를 수행합니다. 이 과정에서 다음과 같은 문제가 발생합니다:

  1. 디버깅 중 조사식(Watch) 사용 불가: 변수가 레지스터로 옮겨지거나 최적화되어 "Variable is optimized away"라는 메시지와 함께 값을 볼 수 없게 됩니다.
  2. 한 줄씩 실행(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 구문으로 변환되므로, 플랫폼에 상관없이 안전하게 사용할 수 있습니다.
반응형