inline

CJB_ny·2022년 12월 12일
0

UE4

목록 보기
4/20
post-thumbnail

inline

C++에서의 함수 호출 과정
함수가 호출되면 우선 스택에 함수로 전달할 매개변수와 함께 호출이 끝난 뒤 돌아갈 반환 주소값을 저장하게 됩니다.

그리고서 프로그램의 제어가 함수의 위치로 넘어와 함수 내에 선언된 지역 변수도 스택에 저장합니다.

그때부터 함수의 모든 코드를 실행하게 되고, 실행이 전부 끝나면 반환값을 넘겨 줍니다.

그 후 프로그램의 제어는 스택에 저장된 돌아갈 반환 주소값으로 이동하여, 스택에 저장된 함수 호출 정보를 제거합니다.

이와 같은 일련의 함수 호출 과정이 함수마다 일어나게 됩니다.

인라인 함수(inline function)

위와 같이 C++에서 함수의 호출은 꽤 복잡한 과정을 거치므로, 약간의 시간이 걸리게 됩니다.

이때 함수를 실행하는 시간이 오래 걸린다면, 함수를 호출하는데 걸리는 시간은 전혀 문제가 되지 않습니다.

하지만 함수의 실행 시간이 매우 짧다면, 함수 호출에 걸리는 시간도 부담이 될 수 있습니다.

C++에서는 이러한 경우에 사용할 수 있는 인라인 함수(inline function)라는 것을 제공합니다.

인라인 함수는 호출될 때 일반적인 함수의 호출 과정을 거치지 않고, 함수의 모든 코드를 호출된 자리에 바로 삽입하는 방식의 함수입니다.

이 방식은 함수를 호출하는 데 걸리는 시간은 절약되나, 함수 호출 과정으로 생기는 여러 이점을 포기하게 됩니다.

따라서 코드가 매우 적은 함수만을 인라인 함수로 선언하는 것이 좋습니다.

언리얼에서 inline

접근함수는 특정 속성만 반환하고 다른 작업을 하지 않는 함수를 말한다. (유니티도 똑같은듯? property같은거)

이런 함수는 위에서 설명한 이유로 인해서 inline으로 처리를 한다.

이렇게하면 코드를 컴파일 할 때 이 함수에 대한 호출이 함수의 내용으로 대체되기 때문.

UE에서는 inline이라는 키워드를 "FORCEINLINE" 라는 키워드로 대신 사용한다.

가령 UProjectileMovementComponent컴포넌트를 return 라는 Getter함수 만들고싶을 경우

FORCEINLINE class UProjectileMovementComponent* GetProjectileMovementComponent() const
	{
		return p_projectileMovementComponent;
	}

이런식이 되겠다.

또한 함수에 inline메크로 갖다 붙이면 선언과 구현을 따로할 수 없고 모두 동시에 해야됨

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글