[UE5] UE5 최적화: inline

Jaeyoung Ko·2025년 1월 19일
0

언리얼 엔진에서 인라인 함수(inline function) 는 성능 최적화와 관련한 중요한 개념이다.




Inline Function


인라인 함수는 함수 호출 시 함수의 본문 코드가 호출된 위치에 직접 삽입되는 방식으로 처리되는 함수이다.

일반적인 함수 호출에서는 stack에 호출 정보를 저장하고 제어를 함수로 이동하는 과정이 필요하지만, 인라인 함수는 이러한 호출에 관련한 overhead를 없앤 최적화 방법이다.


솔직히 설명만으로는 잘 이해가 되지 않아 실제 적용 예시를 찾아보았다.




(1) 일반 함수

// inline 미적용한 일반함수
int Add(int a, int b) {
    return a + b;
}

int main() {
    int result = Add(3, 4);
    return 0;
}

함수 호출 과정

  • main 함수가 Add 함수를 호출
  • Add 함수 실행을 위해 현재 실행 상태를 스택에 저장
  • Add 함수로 제어 흐름을 변경하고 a + b 연산을 수행
  • 반환값을 result에 저장하고, 원래 위치로 복귀

즉, 이런 식으로 일반적인 function이나 method를 활용하는 것은

코드 재사용성의 증가로 메모리 사용에 효율적이나,
함수 호출과 복귀에 필요한 스택 작업으로 인해 오버헤드가 발생하기 때문에,
단순한 함수를 자주 호출하게 되면 성능에 부정적인 영향을 준다.

는 효과를 가지는 것으로 정리해 볼 수 있다.




(2) 인라인 함수

// FORCEINLINE 매크로를 적용한 inline 함수
FORCEINLINE int Add(int a, int b) {
    return a + b;
}

int main() {
    int result = Add(3, 4);
    return 0;
}

인라인 함수의 과정

Add 함수가 호출 과정을 생략하여 스택, 제어 흐름 변경 없이, 컴파일러가 함수의 코드를 복사 삽입하여 3 + 5가 직접 실행




인라인 함수는 일반 함수가 갖는 호출 과정이 없기 때문에 호출에 필요한 비용 오버헤드 없이 빠른 실행속도를 가진다.



매크로: ForceInline 옵션


이러한 inline 함수를 다루는데에 있어, FORCEINLINE은 언리얼 엔진에서 제공하는 매크로로, 컴파일러에게 특정 함수에 대해 반드시 인라인 처리를 하도록 강제하는 역할을 한다.

이는 기본적으로 컴파일러의 판단을 무시하고 무조건 인라인을 적용하는 방식으로, 플랫폼에 따라 다르게 정의된다.

// Windows 환경
#define FORCEINLINE __forceinline

주의사항
너무 큰 함수에 FORCEINLINE을 사용하면 코드 크기가 급격히 증가하게 되어 코드의 메모리 사용량 증가 및 성능 저하를 가져올 수 있기 때문에,

강제적인 인라인을 적용하는 FORCEINLINE 매크로는 신중하게 성능 병목 지점에서만 사용하는 것이 좋다.



FORCEINLINE 사용 사례


  • 핵심 루프의 연산 함수:
    게임에서 프레임별로 반복적으로 호출되는 짧은 함수(예: 벡터 계산).
  • 성능 민감 코드:
    게임 플레이나 렌더링과 같은 실시간 성능이 중요한 코드.
  • 단순 계산 함수:
    수학 연산이나 변환 함수처럼 호출 빈도가 높은 경우.
// 벡터 계산 함수
FORCEINLINE FVector AddVectors(const FVector& A, const FVector& B) {
    return FVector(A.X + B.X, A.Y + B.Y, A.Z + B.Z);
}

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글

관련 채용 정보