[Effective C++] 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자

수민이슈·2023년 4월 20일
0

Effective C++

목록 보기
30/30
post-thumbnail

스콧 마이어스의 Effective C++을 읽고 개인 공부 목적으로 요약 작성한 글입니다!

💡 함수 인라인은 작고, 자주 호출되는 함수에 대해서만 하는 것으로 묶어두자.
이렇게 하면 디버깅 및 라이브러리의 바이너리 업데이트가 용이해지고,
자칫 생길 수 있는 코드 부풀림 현상이 최소화되며, 프로그램의 속력이 더 빨라질 수 있다.
💡 함수 템플릿이 대개 헤더 파일에 들어간다는 일반적인 부분만 생각해서 이들을 inline으로 선언하면 안된다.


🖊️ 인라인 함수

인라인 함수란?

컴파일러에게 함수 호출하는 부분을 함수 정의 부분으로 치환해달라고 요청하는 것
대부분의 C++ 프로그램에서는 컴파일 타임에 인라인을 수행한다.

인라인 함수로 선언하려면
명시적으로 inline 키워드를 붙여줘도 되고,
암시적으로 선언하려면 클래스 정의 안에 함수를 정의해 놓으면 된다.

장단점

장점

1) 함수처럼 보이고 함수처럼 동작한다
2) 매크로보다 훨씬 안전하고 사용하기 좋다.
3) 함수 호출 오버헤드가 없다.
4) 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기 쉬워진다.
5) 라이브러리 차원에서 바이너리 업그레이드를 제공할 수 있다.

단점

1) 코드 비대화
2) 성능이 느려질 수 있다
(페이징 횟수 증가, 명령어 캐시 적중률 저하)

특징

템플릿 인라인 함수

앞서 말했듯, 일반적으로 컴파일 타임에 인라인이 수행되기 때문에,
인라인 함수는 대개 헤더파일에 들어있는게 맞다.

이 템플릿으로부터 만들어지는 모든 함수가 인라인 함수이길 바란다면
템플릿에 inline을 붙여서 선언하면 된다.

컴파일러가 인라인 요청 무시하는 경우

  • 루프가 있는 경우
  • 재귀함수
  • 가상 함수
  • 함수 포인터로 호출한 함수

결론


정말 간단한 함수나 꼭 인라인 해야 하는 함수가 아니면
인라인 하지 말자.


😊

인라인의 코드비대화와 성능저하
생각해볼만하다

0개의 댓글