C++의 인라인 함수
-
인라인
함수가 C++에서 사용되는 이유 -
C++에서
인라인
함수 구현 -
C++에서
constructor
및destructor
를inline
함수로 구현 -
C++에서
인라인
함수 구현의 장점과 단점
이 기사에서는 C++의 인라인
기능, 이를 구현하는 방법, 사용 시 장단점에 대해 설명합니다.
인라인
함수가 C++에서 사용되는 이유
우리가 프로그램을 실행할 때마다 CPU는 함수 호출 다음에 명령어의 메모리 주소를 저장합니다. 인수를 스택에 복사하고 제어를 지정된 함수로 전송합니다.
그런 다음 CPU는 코드를 실행하고 특정 메모리 위치에 값을 반환하고 호출된 함수로 다시 반환합니다. 대부분의 시간이 기능을 실행하는 대신 전환에 소비되는 경우 추가 오버헤드가 생성될 수 있습니다.
이 오버헤드는 대부분의 시간이 실행에만 소비되기 때문에 복잡한 CPU 집약적 작업을 수행하는 큰 기능에서는 중요하지 않습니다.
그러나 이 오버헤드는 기본 작업만 수행하는 작은 기능이 많을 때 중요합니다. 대부분의 시간은 전환하는 데 사용되며 실행에 소요되는 시간은 거의 또는 전혀 없습니다.
따라서 인라인
개념은 스위칭 시간을 절약하고 효율성을 높이기 위해 많은 작은 기능이 있을 때 편리할 수 있습니다.
함수 호출 시 주소를 할당하는 대신 컴파일 타임에 코드에서 함수가 인라인
으로 선언될 때마다 전체 함수 코드를 복사하여 해당 위치에 넣습니다.
통사론:
inline return_type function_name(arguments)
{
...
}
인라인
함수는 컴파일러에 대한 요청일 뿐이므로 컴파일러는 다음과 같은 경우 무시할 수 있습니다.
- 함수에 정적 변수가 있습니다.
- 함수에
goto
또는switch
문이 있습니다. - 함수가 재귀적입니다.
- 함수에 루프가 있습니다.
인라인
의 개념은 일반적으로 클래스와 함께 사용됩니다.
C++에서 인라인
함수 구현
예제 코드:
#include <iostream>
using namespace std;
class myClass {
int a, b;
public:
void sum();
};
inline void myClass ::sum() {
cout << "Enter first value:";
cin >> a;
cout << "Enter second value:";
cin >> b;
cout << "Sum of two numbers is " << a + b << endl;
}
int main() {
cout << "Program using inline function\n";
myClass obj;
obj.sum();
}
위의 코드에서 정의하는 동안 함수를 inline
으로 선언했는데 실제 inline
함수 정의를 클래스 내부보다 클래스 외부에 작성하는 것이 좋은 프로그래밍 방법이기 때문입니다.
그러나 클래스의 함수 정의는 inline
키워드를 사용하지 않더라도 기본적으로 inline
함수 정의입니다.
출력:
Program using inline function
Enter first value:12
Enter second value:13
Sum of two numbers is 25
C++에서 constructor
및 destructor
를 inline
함수로 구현
위의 예를 사용하여 클래스 외부에 inline
기능을 정의하면서 만들면 constructor
와 destructor
를 inline
으로 만들 수도 있습니다.
예제 코드:
#include <iostream>
using namespace std;
class myClass {
int a, b;
public:
myClass();
~myClass();
void sum();
};
inline myClass::myClass() {
a = 100;
b = 200;
}
inline myClass::~myClass() { cout << "destroying the object\n"; }
inline void myClass ::sum() {
cout << "Sum of two numbers is " << a + b << endl;
}
int main() {
cout << "Program using inline function\n";
myClass obj;
obj.sum();
}
출력:
Program using inline function
Sum of two numbers is 300
destroying the object
C++에서 인라인
함수 구현의 장점과 단점
이제 인라인
기능 구현의 몇 가지 이점을 살펴보겠습니다.
- 함수 호출의 오버헤드가 줄어듭니다.
- 함수에서 반환 호출의 오버헤드를 저장합니다.
- 스택에서 변수를 푸시하고 팝하는 오버헤드를 저장합니다.
유용하지만 다음과 같은 몇 가지 단점도 있습니다.
인라인
함수를 너무 많이 사용하면 바이너리 실행 파일의 크기가 커질 수 있습니다. 동일한 코드의 중복이 여기에서 발생하기 때문입니다.- 인라인 함수가 너무 많으면 명령에 대한 캐시 적중률이 감소할 수 있으며, 이는 캐시 메모리에서 기본 메모리로 명령을 가져오는 속도에 영향을 줍니다.
- 코드 크기가 속도보다 더 중요한 임베디드 시스템에서
인라인
기능은 도움이 되지 않습니다. - 컴퓨터의 메모리 성능을 저하시키는 스래싱이 발생할 수 있습니다.