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 키워드를 프로그래머가 사용할 필요가 없다