이번 항목에선 inline을 언제 사용 해야 되는지에 대한 논쟁이다. 대부분 inline을 과용 하고 있어, 문제가 될 소지가 많이 있다고 허브셔터는 지적한다.

허브 셔터는 3개의 질문을 통해서 한번 생각해 보라고 한다.


1. inline이 하는 일은?

함수를 inline으로 만들면 컴파일러는 함수가 쓰이는 곳마다 함수의 코드를 직접 복사해서 붙인다.  이렇게 되므로써, 컴파일러는 함수 호출 코드를 만들지 않고 함수를 마음껏 실행 할 수 있다.


2. inline 함수를 만들면 효율성이 높아지나?

꼭 그런 것만은 아니다. 만약 여기서 "무엇을 최적화 하려 하는가?"를 질문하지 않았다면, 바로 함정에 빠진것이라고 한다. 왜냐하면 inline의 효율은 함수 호출 비용만 줄여 줄 수 있을 뿐이기 때문이다.

a ) 프로그램 크기를 줄이기 위해서

inline을 사용하면 함수가 쓰인 곳마다 함수의 복사본이 만들어 지기 때문에 크기가 커진다고 생각 한다. 이것은 함수 호출 비용 보다 함수의 본체가 더 적은 연산을 하게 된다면, 오히려 프로그램의 크기를 더 줄일 수 있다. 여기서 프로그램 크기를 줄이는 것이 좋다는 이야기는, 캐쉬 적중률을 높임으로써, 더 빠른 계산을 하기 위해서 유리할  있기 때문이다.

그러므로 이 말은 틀린 말일 수도 있고, 맞는 말일 수도 있다.


b ) 메모리 사용을 줄이기 위해서

inline은 기본적인 프로그램 메모리 사용에 거의 영향을 미치지 않느다. 그러므로 틀린 말


c ) 실행 시간을 줄이기 위해서

대부분의 병목 형상은 inline 을 통해서 개선 되지 않는다. 왜냐하면 대부분은 자료구조의 사용과 알고리즘, 잦은 I/O 에서 발생 할 수 있기 때문이다. 맞을 수 있지만, 다른 곳에서 문제를 찾아 봐야 한다.


d ) 개발 속도, 빌드 시간을 줄이기 위해서

이것은 잘못된 생각이다. inline이 되지 않은 함수의 내부가 바뀌였을 경우에, 그 함수를 호출하는 곳은 재 컴파일 되지 않는다. 오로지 그냥 함수 호출 하는 비용만 물면 되기 때문이다. 하지만 inline 이 된 함수의 내부가 바뀌였을 경우에는, 그 함수를 호출 하는 모든 곳이 재 컴파일 된다.

그러므로 잘못 된 말이다.


3. 언제 그리고 어떻게 함수를 inline으로 만드나?

결론 부터 말한다면, "프로파일러가 성능을 분석했을 때, 함수 호출 비용 때문이라고 생각 한다면, 그 때 서야 inline을 고려 해 봐야 한다" 로 요약 될 수 있다.


총평

물론 처음에 짠 코드가 바로 최적화 되어 있는 것이라면, 그것이 제일 좋겠지만 대부분의 사람들은 이럴 수 없으므로, 최적화는 끝까지 미룬 다음, 최적화를 시키는게 좋을 듯 하다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기