언어/C++

인라인(inline) 함수

에린_1 2024. 11. 24. 23:24
728x90

인라인(inline) 함수

  • 함수 호출의 오버헤드를 줄이기 위해, 컴파일러가 함수 호출을 실제 함수 코드로 대체하도록 제안하는 함수이다.
  • C++에서 inline 키워드를 사용하여 선언한다.
  • 인라인 함수는 컴파일 시점에 처리되며, 함수 호출 대신 함수의 본문을 호출 지점에 복사하여 성능을 최적화하려는 목적으로 사용된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우, 이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.

특징

  1. 함수 호출 오버헤드 제거
    • 일반적으로 함수 호출 시, 프로그램은 스택에 매개변수와 반환 주소를 저장하고 복귀하는 오버헤드가 발생한다.
    • 인라인 함수는 이러한 과정 없이, 함수의 코드를 호출 지점에 직접 삽입한다.
  2. 컴파일러의 선택 사항
    • inline 키워드는 컴파일러에게 제안을 하는 것이며, 컴파일러가 반드시 이를 따르는 것은 아니다.
    • 함수가 지나치게 크거나, 재귀 호출을 포함하는 경우 등에서는 인라인 요청을 무시할 수 있다.
  3. 소규모 함수에 적합
    • 함수 본문이 작을수록 인라인 함수로의 변환이 효과적이다.
    • 큰 함수는 복사 비용이 증가하므로, 메모리 사용량이 증가하고, 최적화에 불리해질 수 있다.
  4. 디버깅에 영향
    • 디버깅 시, 인라인 함수는 호출이 아닌 삽입된 코드로 나타나 가독성이 떨어질 수 있다.

장점

  1. 성능 향상
    • 함수 호출 오버헤드 제거로 속도가 빨라질 수 있다.
  2. 소스 코드 간소화
    • 매크로(#define)보다 안전하게 사용할 수 있다.
  3. 컴파일 타임 최적화
    • 자주 호출되는 소규모 함수에 대해 최적화를 유도한다.

단점

  1. 코드 크기 증가
    • 함수 호출이 반복될 경우, 각 호출 지점에 함수 코드가 삽입되므로 바이너리 크기가 커질 수 있다.
  2. 컴파일 시간 증가
    • 함수의 코드를 여러 곳에 삽입하기 때문에, 컴파일러가 더 많은 작업을 수행하게 된다.
  3. 디버깅 어려움
    • 삽입된 코드로 인해 함수 호출 트레이스가 어렵고, 디버깅 과정에서 복잡성이 증가한다.
  4. 재귀 함수에는 사용 불가
    • 재귀적으로 호출되는 함수는 인라인으로 처리할 수 없다.

인라인 함수가 비활성화되는 조건

  1. 함수의 코드 크기가 너무 큰 경우
  2. 함수가 재귀 호출을 포함한 경우
  3. 함수가 가상 함수인 경우
  4. 함수의 주소가 사용되는 경우
728x90

'언어 > C++' 카테고리의 다른 글

구조체(Struct)  (0) 2024.11.24
참조자(Reference)  (0) 2024.11.24
Call by Value/Call by Reference  (0) 2024.11.24
추상 클래스/인터페이스  (0) 2024.11.22
24.08.28 CS, C++  (2) 2024.08.28