인라인 함수는 C++의 실행 속도 개선을 위해 등장했다
C++에서 간단한 기능을 하는 비교적 짧은 코드의 함수들이 있는데 이 함수들이 간결해 실행속도에 영향을 끼치지 않을 것 같지만 함수 호출 과정에서 프로그램 속도가 떨어지게 된다
함수를 실행하는 시간이 오래 걸린다면, 함수를 호출하는데 걸리는 시간은 문제가 되지 않지만 함수의 실행 시간이 매우 짧다면(코드 길이가 짧음), 함수 호출에 걸리는 시간이 부담스러워짐
이런 과정이 엄청 많이 반복되면 리소스가 불필요하게 많이 사용하게 된다
이것이 바로 오버헤드 현상이고 이를 해결하기 위해 등장한 것이 inline 키워드이다
인라인 함수는 호출될 때 위와 같은 일반적인 함수의 호출 과정을 거치지 않고, 함수의 모든 코드를 호출된 자리에 바로 삽입하는 방식의 함수이다
이 방식은 함수를 호출하는 데 걸리는 시간은 절약되나, 함수 호출 과정으로 생기는 이점들을 포기하므로 코드가 매우 적은 함수만 인라인 함수로 선언하는 것이 좋다
inline 함수 원형
or
inline 함수 정의
함수 이름 앞에 inline 키워드를 붙이면 컴파일러가 인라인 처리를 해준다
인라인 처리가 되면 실제 컴파일러가 코드를 어떻게 변환하냐면
inline int sum(int a, int b)
{
return a + b;
}
int main()
{
int result = 0;
// result = sum(1, 2); 이 코드가 컴파일러에 의해
result = 1 + 2; // 이렇게 바뀐다
return 0;
}
그 외에도 inline과 동일한 역할을 하는 키워드 __inline이 있다
__forceinline 이라는 키워드를 보면 이름에서 유추하듯이 컴파일러에게 강제로 인라인화하라고 명령해서 컴파일러에게 명령을 더 쌔게 할 수도 있다noinline 키워드도 있다정리하자면 인라인 함수는 함수 호출 시 생기는 오버헤드를 최소화하고 컴파일 최적화 등의 장점을 제공하지만, 잘못 사용 시 오히려 성능의 저하를 초래할 수 있는 기능이다