2009. 11. 20. 13:42
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>
#define SQUARE(x) ((x)*(x))

int main()
{
 int n=3;
 printf("%d\n", SQUEARE(++n)); // ? ==>> 25가 출력된다.
 return 0;           // 우리가 원하는건 4.
}




* 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
Posted by 어북어위크