inline 함수
내부에서 작성된 코드의 속도와 함수의 장점을 결합하는 방법
컴파일러에서 함수를 인라인 함수로 처리하도록 요청한다. 컴파일러가 코드를 컴파일하면 모든 인라인 함수가 인-플레이스(in-place) 확장된다. 즉, 함수 호출이 함수 자체의 내용 복사본으로 대체되어 함수 오버헤드가 제거된다
특징
- 인라인 함수를 사용하려면 함수 선언 앞에 inline 이라는 키워드를 붙이거나 함수 정의 앞에 inline이라는 키워드를 붙인다.
- 클래스 멤버 함수가 inline을 사용하려면, 함수 정의의 위치가 *.h에 있어야 한다. 안 그러면 확인할 수 없는 외부 참조라고 뜬다.
- 프로그래머가 inline 선언을 해도 컴파일러가 인라인화를 거부할 수 있다.
- 프로그래머가 inline 선언을 안 해도 컴파일러가 인라인화를 할 수 있다.
- 함수의 덩치가 크거나 재귀호출이면 inline 요구를 거절하는 컴파일러도 있다.
- 함수 코드의 수행 시간이 짧고 빈번하게 호출되는 함수가 아니라면, 인라인 함수로 인한 절대적인 시간 절약은 그다지 크지 않다.
장점
- 함수 내부의 코드를 재사용할 수 있다.
- 인스턴트 코드보다 함수에서 코드를 변경하거나 업데이트하기가 더 쉽다.
- 함수 이름을 통해 코드가 무엇을 의미하는지 이해하기 더 쉽다.
- 함수는 함수 호출 인수가 함수 매개 변수와 일치하는지 확인하기 위해 타입 검사를 한다. (매크로는 안한다.)
- 함수는 프로그램을 디버그하기 쉽게 만든다.
단점
- 인라인 함수가 모든 함수 호출에 대해 적절한 위치에서 확장되므로 인라인 함수가 길거나 인라인 함수를 여러 번 호출하는 경우 컴파일된 코드를 약간 더 크게 만들 수 있다.
- 메모리 사용 측면에서는 인라인 함수가 일반 함수보다 불리하다. 이유는 어떤 프로그램에서 인라인 함수를 열 번 호출한다면, 프로그램은 그 함수의 사본을 프로그램의 코드 안에 열 번이나 삽입해야 하기 때문이다.
- 매크로 함수와 달리 자료형에 독립적이지 못 하다. 단, 템플릿을 이용하면 자료형에 독립적으로 사용할 수 있다.
'Programing > C, C++' 카테고리의 다른 글
STL Chrono (0) | 2023.01.10 |
---|---|
C++ Singleton 패턴 (0) | 2019.04.15 |
C++ MFC CreateProcess() 사용법 (0) | 2017.11.08 |
C++ GetLastError() 리턴 값 의미 (0) | 2017.11.08 |