안녕하세요 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(1, 2);
// 2. 인라인 함수
int n2 = add2(1, 2);
// int n2 = a + b; // 인라인 함수는 컴파일 후에 이것과 같이 코드가 치환됨
return 0;
}
|
cs |
이런식으로 컴파일 했을때
int n2 = add2 (1, 2); 이것을
add2 함수가 inline 함수 이므로 컴파일 후에는
int n2 = 1 + 2; 이런식으로 치환이 되어서 처리속도가 빨라지게 됩니다.
즉, 일반함수를 호출하면 해당 함수의 주소로 갔다가 계산하고 돌아오는 과정을 거쳐야하는데 inline 함수는 이미 치환되어있으므로 따로 함수 호출 과정을 통해서 주소를 이동할 필요없이 그 위치에서 처리하므로 속도가 빠릅니다.
장점
- 인라인화가 진행되면 실제 함수 호출 보다 빠르다. (프로그램 실행 속도를 높일 수 있다.)
단점
- 치환되는 함수가 큰 경우 프로그램의 목적코드의 크기가 커질 수 있다.
요즘 컴파일러는 알아서 판단해서 최적화를 해주기 때문에
개발자가 inline을 붙이지 않아도 inline이 붙은 함수처럼 작동하기도하고
개발자가 inline을 붙였다 하더라도 inline이 안붙은 함수처럼 작동하기도 합니다.
"결론적으로 컴파일러가 알아서 하니 굳이 inline 키워드를 막 신경쓰면서 작성할 필요는 없다." 입니다.
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] 멤버 초기화 리스트 (member initializer lists) (0) | 2021.02.19 |
---|---|
[C++] nullptr (널 포인터 리터럴) (3) | 2021.02.17 |
[C++] 디폴트 매개변수 (default parameter) (0) | 2021.02.15 |
[C++] constexpr 상수 (0) | 2021.02.11 |
[C++] 2진수 8진수 16진수 표기법, 자릿수 표기법 (0) | 2021.02.09 |
[C++] std::setw, std::setfill, std::left, std::right (입출력 형태 지정2) (0) | 2021.02.05 |
[C++] 8진수, 10진수 16진수 출력 (입출력 형태 지정 1) (1) | 2021.02.04 |
[C++] 표준 입출력 std::cin, std::cout 정리 및 예제 (0) | 2021.02.02 |