본문 바로가기

전자 공학/C언어 C++

[C++ 독학하기] 8. 인라인 함수 개념

반응형

안녕하세요. 취업한 공대누나입니다.

요즘은 C++에 대한 공부를 계속해서 해나가고 있는데요.

오늘은 인라인 함수에 대해서 공부해보도록 하겠습니다.


1. 인라인(Inline) 함수란?

일반적으로 함수를 호출하면 메모리 사용이 증가하고 매개변수 때문에 메모리 복사가 일어나며 제어 흐름도 이동해야 합니다. 눈에 보이지는 않아도 내부적으로는 여러 연산들이 일어나고 있는 것입니다.

복잡한 함수의 경우 함수를 호출할 때 생기는 오버헤드가 크게 중요하지 않지만 간단한 함수의 경우 함수 호출에 필요한 시간이 함수를 실행하는데 필요한 시간보다 더 긴 경우가 있습니다.

보통 이러한 오버헤드들을 줄이기 위해서 매크로를 사용합니다. 

하지만 매크로는 함수가 아니기 때문에 논리적 오류를 발생시킬 수 있으며 매개변수 형식을 지정할 수가 없는 것 또한 문제가 됩니다. 그래서 사용하는 것이 바로 인라인 함수입니다.

 

인라인 함수는 내부적으로는 함수 호출을 하지 않으면서도 매개변수를 지정할 수 있습니다.

 

inline 이라는 키워드는 함수를 인라인 함수로 처리하도록 합니다. 함수 호출이 함수 자체의 내용 복사본으로 대체되어 함수 오버헤드가 제거됩니다. 하지만 함수가 모든 함수 호출에 대해 적절한 위치에서 확장되므로 인라인 함수가 길거나 인라인 함수를 여러 번 호출하는 경우 컴파일된 코드를 더 크게 할 수도 있습니다. 밑에 예제에서 조금 더 설명드리도록 하겠습니다.

 

요즘의 컴파일러는 자동으로 함수를 인라인화를 할 수 있습니다.

함수를 따로 inline으로 표시하지 않아도 컴파일러는 알아서 판단하여 함수를 인라인화 시킵니다.

따라서 대부분의 경우 굳이 사용할 필요는 없습니다.

 


2. 예제 소스

가장 위에 define ADD_TEST는 매크로

그 다음에 정의된 Add_TEST는 일반 함수,

가장 마지막에는 inline 키워드가 붙은  Add_TEST2는 인라인 함수가 있습니다.

아래 결과창을 보시면 모두 값이 동일한 것을 알 수 있습니다.

일반 함수의 경우 Add_TEST라고 할 경우 함수를 호출하여 실행을 하게 됩니다.

하지만 인라인 함수의 경우 컴파일러가 함수를 복제하여 직접 넣어주는 것입니다.

즉 Add_TEST2자리에 그냥 return a+b가 복제해서 넣어진다고 생각하시면 이해가 빠르게 되실 겁니다.

그래서 인라인 함수를 반복해서 10번 반복해서 사용하면 return a+b가 코드 안에 10번 삽입되는 것과 같습니다. 즉 이런 경우에는 효율적이지 못합니다.

마찬가지의 이유로 코드의 길이가 일정 수준 이상 길어지면 인라인 함수로 사용하는 것은 좋지 않겠지요. 


간단한 개념이지만 알고 있는 것과 모르고 있는 것의 차이는 나중에 커질 수가 있습니다.

한발자국들이 모여서 큰 걸음을 만들어 내는 것입니다.

 

반응형