본문 바로가기
Study/C++

Inline 함수!

by 뿡뿡대마왕 2011. 9. 28.
반응형
자 인라인 함수에 대해서 공부해볼까나...
c에서는 매크로라는 것이 있었다..
 
#define Test(A) (A/10)
 
위와 같이 함수를 매크로는 선언해서
 
std::cout<< Test(10)<<endl;
이라고 코드를 작성하면 전처리 과정을 거처서 아래와 같이 변한다고 한다.
  
std::cout<< (A/10)<<endl;
즉 코드 자체가 전처리 과정을 통해 저런 모습이 된다고 한다..즉 함수를 호출하는 과정이 사라지고 저렇게 내용자체가 
붙어버린다는 거지...아시는 분은 아시겠지만 함수를 호출하는 과정에는 스택 메모리에 공간을 할당하고 쓰고 하면서
시간이 걸리는데 그런 부분이 사라지는 이점이 있다는 얘기다...
c++에서는 저런 구현을 그냥 함수앞에 inline라고 선언만 해주면 된다고 한다..참 요런 부분은 편리하네
즉 아래처럼 키워드를 함수 맨앞에 선언..ㅋㅋ
inline int Test(int a)
.......
return a;
}
근데 여기서 매크로를 이용한 함수의 in-line화는 전처기에 의해서 처리되는데 키워드를 사용한 방식은 컴파일러에 의해
처리된다고 한다...컴파일러에서 in-line선언이 오히려 성능을 저하시키면 무시해버린다고 한다..
여기선 궁금한건..그럼 무조건 다 inline함수로 선언해 버리면 않되나? 그러면 어떠한 문제가 생길려나..
컴파일러가 알아서 처리해준다고 하고..어떠한 단점이 있을까나..대충알아보니 함수를 실행하는곳 자체에 소스가 풀리기 
때문에 메모리를 많이 잡아먹는다고 하네...당연히 그렇겠지..흠
자료를 찾아보니 인라인 함수 사용에 대한 주의 점이 나와있었다.
 짧은 함수를 인라인 함수로 사용해야 한다.
• 함수 호출 비용을 절약한다.
 짧은 인라인 함수는 함수 호출문에 대해 만들어지는 코드보다 목적 코드가 작아질 수 있다.
 캐시 적중율이 높아진다.

 코드 길이가 긴 인라인 함수는 사용하지 말자! 
• 인라인 함수를 남용하게 되면, 컴파일 시에 코드 대체로 인한 목적 코드의 크기가 증가할 수 있다.

③ 가상 함수를 인라인 함수로 만들지 말자!
• 가상 함수는 컴파일 시가 아닌, 프로그램 수행시 결정되므로 컴파일 시에 코드 대체되는 인라인 함수로는 사용될 수 없다.


3. 인라인과 매크로
간단한 처리를 위해 사용되어온 C의 잔재인 매크로들은 문제점을 안고 있으므로 인라인 함수로 고쳐 사용한다.
다음은 숫자를 제곱하는 매크로 함수이다.



과묵, 솔직, 겸손, 성실.....
반응형

댓글