취미로 음악을 하는 개발자

[C++] 인라인(inline) 함수 본문

공대인/C[++]

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

영월특별시 2019. 5. 12. 22:32
728x90

함수 호출과 실행을 마치고 돌아오는 과정에서 다음과 같은 시간 소모가 발생한다.


그림 출처


이 오버헤드는 무시할 수 없는 심각성을 보여줄 때가 있는데

int odd(int x) {

return x%2;

}


for (int i = 0; i < 10000; i++)

odd(i);


위와 같은 코드가 있을 때 odd라는 함수는 1만번 호출하게 된다. 짧은 코드를 함수로 만들면 함수 호출의 오버헤드가 상대적으로 커서 프로그램 실행 시간이 길어지는 원인이 된다. 따라서 이렇게 짧은 코드는 함수로 만들지 않는 것이 좋다.

이렇게 짧은 코드로 구성된 함수 호출의 오버헤드를 방지하기 위해 inline 함수가 있다.

인라인 함수의 기능은 컴파일러가 인라인 함수의 호출부분을 코드 그대로 삽입하여 함수 호출이 일어나지 않게 한다.

-> 함수 호출 오버헤드가 없어지기 때문에 실행 속도가 빨라진다.


위에 썼던 코드에서 odd 함수를 inline 키워드를 넣어서 실행하게 되면 아래와 같은 효과를 가진다.

for (int i = 0; i < 10000; i++)

odd(i%2);


물론 이렇게 속도가 향상되는 인라인 함수도 단점이 있는데 인라인 함수를 호출하는 곳이 여러 군데 있으면 그 만큼 전체 크기가 늘어나게 된다.



'공대인 > C[++]' 카테고리의 다른 글

[C++] Static 멤버  (0) 2019.05.12
[C++] 초기화 목록, 생성자 위임  (0) 2019.05.05
[C++] 객체 생성과 소멸  (0) 2019.05.05
[C++] 클래스  (0) 2019.04.23
[C++] Namespace  (0) 2019.04.12
Comments