KoreanFoodie's Study
[언리얼] inline 과 FORCEINLINE 의 차이 본문
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)
'Game Dev > Unreal C++ : Dev Log' 카테고리의 다른 글
언리얼 스트링 테이블에서 텍스트 조회 / 텍스트 값으로 테이블 조회하기 (0) | 2023.01.05 |
---|---|
언리얼에서 Delay/Timer 기능 구현 (일정 시간이 지난 후 함수 실행) (0) | 2023.01.03 |
[언리얼] Slate(슬레이트)의 구조와 철학 (공식 문서 해설 및 정리) (0) | 2022.12.07 |
[언리얼] 위젯(UUserWidget) 과 Native 함수들, UObject Interface (0) | 2022.12.06 |
[언리얼] 언리얼에서 더티 플래그(Dirty Flag) 패턴 사용하기 (0) | 2022.12.01 |
Comments