KoreanFoodie's Study

[언리얼] inline 과 FORCEINLINE 의 차이 본문

Game Dev/Unreal C++ : Dev Log

[언리얼] inline 과 FORCEINLINE 의 차이

GoldGiver 2022. 12. 28. 11:58

inline 과 FORCEINLINE 의 차이

사실 이 둘의 차이는 이미 단어에서 쉽게 파악할 수 있다.

일단 함수의 인라인화라는 것은, 컴파일러가 함수 바디를 컴파일 타임에 붙여 넣어 함수 호출의 오버헤드를 줄이는 최적화 방식이라고 볼 수 있다.

C++ 에서 inline 은 컴파일러에게 함수를 인라인화할 것을 '요청' 한다. 이는 '명령' 이나 '강제'가 아니다. 복잡한 함수나 가상함수는 컴파일러가 인라인화 해주지 않으며, inline 키워드를 쓰지 않더라도 작고 간단한 함수의 경우 컴파일러가 알아서 인라인화를 해 주기도 한다.

 

반면 FORCEINLINE 은 말 그대로 강제적으로 인라인화를 시킨다. 생성자와 소멸자 등, 인라인화 시키기에 적합하지 않은함수들이 생각보다 많이 존재하므로, FORCEINLINE 을 쓸 때는 주의를 해야 한다.

 

참고로 inline 은 유일한 C++ 의 키워드이다. 코드를 보다보면 __inline, __inline__, __forceinline 등이 쓰인 코드를 볼 수 있는데, 후자들은 vendor-specific 한 녀석들(즉, MSVC / GCC 등 특정 컴파일러에서만 사용)이다.

MSVC 에서는 __inline, __forceinline 을 사용하는데, __forceinline 은 강제가 아닌 조금 더 '강력한 권장'의 의미를 갖는다. __inline 은 C 에서도 사용이 가능하다.

GCC 와 clang 에서는 __attribute__((always_inline)) 를 사용하기도 한다.

 

 

참고 : inline 과 FORCEINLINE 의 차이(언리얼 포럼), inline 함수에 대한 간략한 설명, inline vs __inline(StackOverflow), 인라인이 불가능한 경우(블로그), C++ 의 인라인 함수(MSDN)
Comments