inline 키워드

함수 호출 비용

  • 함수 호출될 때마다 일정량의 성능 오버헤드 발생
    • CPU가 다른 레지스터와 함께 실행 중인 현재 명령어의 주소를 저장해야 힘
    • 나중에 반환할 위치를 알 수 있도록 모든 함수 매개 변수를 생성
  • 새 위치로 분기하기 보다 내부 작성 코드(인스턴트 코드)가 더 빠름

inline

  • inline 키워드는 컴파일러에서 함수를 인라인 함수로 처리하도록 요청
  • 컴파일러가 코드를 컴파일하면 모든 인라인 함수가 인-플레이스(in-place) 확장
    • 함수 호출이 함수 자체의 내용 복사본으로 대체되어 함수 오버헤드가 제거
  • 인라인 함수가 길거나 너무 많이 호출될 경우 프로그램의 크기가 커질 수 있음
int min(int x, int y) 
{ 
  return x > y ? y : x; 
} 

// min 함수를 2번 호출함으로써
// 오버헤드 패널티 두 번 발생
int main() 
{ 
  std::cout << min(5, 6) << '\n'; 
  std::cout << min(3, 2) << '\n'; 
  return 0; 
}
// 함수에 inline 키워드 추가
inline int min(int x, int y) 
{ 
  return x > y ? y : x; 
} 

// main의 컴파일 후 작동 코드
int main() 
{ 
  std::cout << (5 > 6 ? 6 : 5) << '\n'; 
  std::cout << (3 > 2 ? 2 : 3) << '\n';
  return 0; 
}

하지만 inline 키워드를 쓸 필요는 없다

  • 컴파일러는 프로그래머의 inline 요청을 자유롭게 무시할 수 있다
    • 긴 함수를 인라인화 하려고 하면 무시할 가능성
  • 현대 컴파일러는 자동으로 inline 키워드를 사용, 성능 향상을 하는 데 뛰어나다
    • 인라인으로 표시하지 않더라도 컴파일러는 성능이 향상될 것으로 생각하는 함수를 인라인화
  • 대부분의 경우 inline 키워드를 프로그래머가 사용할 필요가 없다

출처

Categories: ,

Updated: