Blog

ENGINEERING NOTE

[Unreal Engine] FORCEINLINE

C++ 표준의 inline 키워드는 "인라인화를 제안"하는 역할로, 컴파일러가 해당 함수를 호출 위치에 직접 붙여넣도록 권장합니다. 단, 복잡한 함수라면 무시할 수도 있고, 명시 없이도 인라인화될 수 있습니다.반면에 Unreal Engine에서의 FORCEINLINE

Unreal Engine

FORCEINLINE

C++ 표준의 inline 키워드는 "인라인화를 제안"하는 역할로, 컴파일러가 해당 함수를 호출 위치에 직접 붙여넣도록 권장합니다. 단, 복잡한 함수라면 무시할 수도 있고, 명시 없이도 인라인화될 수 있습니다.

반면에 Unreal Engine에서의 FORCEINLINE Macro는 인라인화를 '강제'한다.

언제 FORCEINLINE을 사용할까?

  • 반환자, Getter/Setter, 간단한 연산
text
FORCEINLINE float GetSpeed() const { return Speed; }

Inline의 효율성과 장점

항목설명
🔄 함수 호출 오버헤드 제거호출 스택 생성 없이 코드를 직접 삽입 → call/ret 비용 제거
🚀 성능 향상 가능작은 함수들이 반복적으로 호출되는 경우에 성능 개선
🧠 가독성과 유지보수 향상코드 중복 없이 로직을 정리할 수 있음 (FORCEINLINE bool IsValid() { return Ptr != nullptr; })
📦 템플릿 코드 최적화에 유리헤더에서 정의된 템플릿 함수들은 인라인화되며, 최적화가 잘 됨

Inline 사용 시 주의점

항목설명
⚠️ 함수 내용이 너무 복잡하면 비효율적인라인 함수가 너무 길거나 조건문이 많으면 오히려 캐시 부담 증가
📈 코드 크기 증가 (Code Bloat)동일 함수가 여러 곳에 인라인되면 바이너리 크기 증가 가능
🚫 가상 함수, UFUNCTION 등에는 부적절가상 함수는 런타임 디스패치를 위해 인라인화가 불가능함
⚠️ 디버깅 어려움인라인 함수는 실제 함수 호출이 없기 때문에 스택 트레이스에서 잘 보이지 않을 수 있음
📉 성능 저하 가능성너무 많은 인라인으로 인해 캐시 미스 및 분기 예측 실패 등 부작용 발생 가능