<개인공부>/[C++]

[C++] 인라인 함수 (inline function)

BlockDMask 2021. 2. 10. 00:30
반응형

안녕하세요 BlockDMask 입니다.
오늘은 C++의 inline 함수에 대해서 알아보겠습니다.

<목차>
inline function이란?

 

인라인 함수 inline function?


함수 반환 타입 앞에 'inline"을 표기한 함수

inline 반환형 함수이름 ( 매개변수 ) 

이렇게 함수 이름앞에 inline을 붙이면 일반 함수와 달리, 프로그램이 생성될때 함수가 치환되어 생성됩니다.

아래 예제에서 간단하게 예시를 들어보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
 
int add1(int a, int b) 
{
    return a + b;
}
 
inline int add2(int a, int b) 
{
    return a + b; 
}
 
 
int main(void) {
    // 1. 일반 함수
    int n1 = add1(12);
 
    // 2. 인라인 함수
    int n2 = add2(12); 
    // int n2 = a + b;   // 인라인 함수는 컴파일 후에 이것과 같이 코드가 치환됨
 
    return 0;
}
 
cs

이런식으로 컴파일 했을때
int n2 = add2 (1, 2); 이것을
add2 함수가 inline 함수 이므로 컴파일 후에는 
int n2 = 1 + 2; 이런식으로 치환이 되어서 처리속도가 빨라지게 됩니다.

즉, 일반함수를 호출하면 해당 함수의 주소로 갔다가 계산하고 돌아오는 과정을 거쳐야하는데 inline 함수는 이미 치환되어있으므로 따로 함수 호출 과정을 통해서 주소를 이동할 필요없이 그 위치에서 처리하므로 속도가 빠릅니다.

 

장점
- 인라인화가 진행되면 실제 함수 호출 보다 빠르다. (프로그램 실행 속도를 높일 수 있다.)

단점
- 치환되는 함수가 큰 경우 프로그램의 목적코드의 크기가 커질 수 있다. 

요즘 컴파일러는 알아서 판단해서 최적화를 해주기 때문에
개발자가 inline을 붙이지 않아도 inline이 붙은 함수처럼 작동하기도하고
개발자가 inline을 붙였다 하더라도 inline이 안붙은 함수처럼 작동하기도 합니다.

"결론적으로 컴파일러가 알아서 하니 굳이 inline 키워드를 막 신경쓰면서 작성할 필요는 없다." 입니다.

 

반응형