728x90
인라인(inline) 함수
- 함수 호출의 오버헤드를 줄이기 위해, 컴파일러가 함수 호출을 실제 함수 코드로 대체하도록 제안하는 함수이다.
- C++에서 inline 키워드를 사용하여 선언한다.
- 인라인 함수는 컴파일 시점에 처리되며, 함수 호출 대신 함수의 본문을 호출 지점에 복사하여 성능을 최적화하려는 목적으로 사용된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우, 이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.
특징
- 함수 호출 오버헤드 제거
- 일반적으로 함수 호출 시, 프로그램은 스택에 매개변수와 반환 주소를 저장하고 복귀하는 오버헤드가 발생한다.
- 인라인 함수는 이러한 과정 없이, 함수의 코드를 호출 지점에 직접 삽입한다.
- 컴파일러의 선택 사항
- inline 키워드는 컴파일러에게 제안을 하는 것이며, 컴파일러가 반드시 이를 따르는 것은 아니다.
- 함수가 지나치게 크거나, 재귀 호출을 포함하는 경우 등에서는 인라인 요청을 무시할 수 있다.
- 소규모 함수에 적합
- 함수 본문이 작을수록 인라인 함수로의 변환이 효과적이다.
- 큰 함수는 복사 비용이 증가하므로, 메모리 사용량이 증가하고, 최적화에 불리해질 수 있다.
- 디버깅에 영향
- 디버깅 시, 인라인 함수는 호출이 아닌 삽입된 코드로 나타나 가독성이 떨어질 수 있다.
장점
- 성능 향상
- 함수 호출 오버헤드 제거로 속도가 빨라질 수 있다.
- 소스 코드 간소화
- 매크로(#define)보다 안전하게 사용할 수 있다.
- 컴파일 타임 최적화
- 자주 호출되는 소규모 함수에 대해 최적화를 유도한다.
단점
- 코드 크기 증가
- 함수 호출이 반복될 경우, 각 호출 지점에 함수 코드가 삽입되므로 바이너리 크기가 커질 수 있다.
- 컴파일 시간 증가
- 함수의 코드를 여러 곳에 삽입하기 때문에, 컴파일러가 더 많은 작업을 수행하게 된다.
- 디버깅 어려움
- 삽입된 코드로 인해 함수 호출 트레이스가 어렵고, 디버깅 과정에서 복잡성이 증가한다.
- 재귀 함수에는 사용 불가
- 재귀적으로 호출되는 함수는 인라인으로 처리할 수 없다.
인라인 함수가 비활성화되는 조건
- 함수의 코드 크기가 너무 큰 경우
- 함수가 재귀 호출을 포함한 경우
- 함수가 가상 함수인 경우
- 함수의 주소가 사용되는 경우
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 |