C++:inline
인라인 함수(inline function)는 여러 버전의 C와 C++ 프로그래밍 언어에서 컴파일러가 인라인 확장 수행을 요청 받는 함수이다. 다시 말해, 프로그래머는 함수를 호출하는 코드를 함수가 정의된 곳에다 생성하지 않고 컴파일러가 완전한 함수체를 함수가 호출되는 모든 장소에 삽입할 것을 요청할 수 있다.
Restrictions
인라인 함수의 제약사항에 대하여 정리한다.
- inline 함수 내에서는 루프문 (do whie, while, for), switch, goto문을 사용할 수 없다.
- inline 함수호출시 호출되기 전에 먼저 inline 함수가 정의되어 있어야 한다.
- inline 함수 내에서 재귀호출을 할수 없다.
- inline 함수는 한 수식 내에서 두 번이상 호출될수 없다.
- 함수 포인터로 inline 함수의 주소를 취할 수 없다.
inline 함수는 호출방식이 아니라 치환전개방식이기 때문이다.
Tip
static/inline keyword position
- static/inline keyword: in front of prototype and/or implementation?
- Stackoverflow: Inline function prototype vs regular declaration vs prototype
static이나 inline과 같은 키워드는 Prorotype, Implementation 중 어느 곳에 위치해야 하는가?
답변은 Prototype.
Assembly result
아래의 코드에서 inline(__attribute__((always_inline))
)구문을 사용할 경우와 사용하지 않을 경우를 Assembly 결과로 비교한다.
__attribute__((always_inline)) int add(int i)
{
return i + i;
}
int main()
{
int a = add(10);
return 0;
}
참고로 objdump를 사용하여 결과를 추출하였다.
결과를 보면 알겠지만 inline시 callq
명령이 빠지고 add
명령이 포함되었다.
Favorite site
- Wikipedia (en) Inline function에 대한 설명
- [추천] Inline Functions
- GCC: An Inline Function is As Fast As a Macro
- inline keyword 와 inl file. ( *.inl )
- C++에서의 파일분할
- 4. 함수 - 함수 포인터, inline 함수
- MSDN: 인라인 함수(C++)
- GCC: An Inline Function is As Fast As a Macro
- 항목 25 : inline 해부 ( 난이도 : 7 )
- C++ 인라인 함수(inline function)란? 1
References
-
Netrance.blog.naver.com_-inline_function-_asm.pdf ↩