| int square1(int x) { return x * y; } inline int square2(int x) { return x * y; } int main() { int n = square1(3); => push 3 call ?square1@@YAHH@Z add esp, 4 int n = square2(3); => mov eax, 3 imul eax, 3 return 0; } |
* 함수 호출의 원리
- 함수로 전달할 인자를 스택에 넣고 해당 함수 호출.
- 함수 호출에 약간의 Overhead발생.
* 매크로 함수와 함수 호출
- 문자 치환방식. 일반 함수보다 속도가 빠르다.
- 버그가 많다.
|
#include<iostream> int main() |
* Inline 함수와 함수 호출
- 실제 호출이 아닌 기계어 코드의 치환.
- 일반적으로 함수 호출의 속도가 빠르다.
* Inline 함수와 파일 크기
- 일반적으로는 실행파일의 크기가 증가
- 하지만 크기가 아주 작은 함수의 경우 실행파일의 크기가 감소.
* Inline 함수와 성능
- 단순한 함수 호출에서는 30 ~ 40%의 성능 향상.
- 실행파일의 크기 증가로 인해서 캐시 적중률이 떨어져서 오히려 속도 저하가 발생할 수 있다.
* Inline 함수와 헤더파일
- 함수의 구현과 호출이 동일 파일에 있어야 한다.
- 일반적으로 헤더 파일에 구현한다.
* 암시적 Inline과 명시적 inline
- 암시적 inline : 클래스 선언부 안에 구현함. 멤버함수
- 명시적 inline : inline 키워드를 사용해서 구현.
* Inline 함수의 주의사항
- 가상함수는 인라인화 되지 않는다.
- 함수 구현에 적용되는 것이 아니라 함수호출에 적용되는 문법.
- 함수포인터를 사용한 후출은 인라인 적용이 되지 않는다.
* Inline 함수 전략
- 작고 자주 사용되는 함수만 인라인으로 사용한다.
<참고>
Effective c++ 3판 - item 30
More Exception c++ - item 12
'Programming > C++' 카테고리의 다른 글
| Reference (0) | 2010.07.12 |
|---|---|
| Namespace (0) | 2010.07.12 |
| * Overloading 된 함수 찾는 순서 (0) | 2009.11.19 |
| * Function Overloding (0) | 2009.11.19 |
| * Default Parameter (0) | 2009.11.19 |