인라인 함수는 프로그램의 실행 속도를 높이기 위해 C++에 새로 보강된 것이다.
(C에서는 매크로 기능을 위해 #define을 쓰고는 했다.)
일반 함수와 인라인 함수의 가장 큰 차이는 프로그래머가 코드를 어떻게 작성하느냐에 있는 것이 아니다.
C++ 컴파일러가 코드를 프로그램에 어떻게 결합하느냐에 있다.
++ 인라인 함수와 일반 함수의 차이를 이해하려면 프로그램의 내부 구조를 깊이 있게 살펴볼 필요가 있다.
(컴퓨터 구조 수업을 들으면 쉽다)
컴파일 작업의 최종 산출물은 기계어 명령으로 이루어진 실행 프로그램이다.
(High-level -> Assembly -> Machinary)
프로그램을 실행하면, 운영체제는 이 명령들을 컴퓨터의 메모리에 로드한다.
로드된 명령들은 각각 하나의 특정 메모리 주소를 갖는다.
그러고 나서 컴퓨터는 이 명령들을 순차적으로 실행한다.
(Instruction을 CPU가 차례대로 수행한다.)
(Branch or Jump)루프나 분기문을 만나면,
프로그램은 앞이나 뒤의 특정 주소로 점프하여 명령들을 건너뛴다.
일반적인 함수의 호출은 프로그램을 다른 주소로 점프시켰다가
함수의 처리가 종결되면 다시 원래의 자리로 돌아오는 것이다.
C++ 인라인 함수가 이 문제를 해결하기 위한 대안을 제공한다.
인라인 함수에서는 컴파일된 함수 코드가 프로그램의 다른 코드 안에 직접 삽입되어 있다.
이 말은 컴파일러가 함수 호출을 그에 대응하는 함수 코드로 대체한다는 것을 의미한다.
인라인 코드를 이용하면 함수를 그 자리에서 처리하므로, 그 함수를 수행하기 위해 프로그램이 다른 주소로 점프할 필요가 없다.
따라서 인라인 함수는 일반 함수보다 약간 빠르게 수행된다.
그러나 메모리 사용 측면에서는 인라인 함수가 일반 함수보다 불리하다.
어떤 프로그램에서 인라인 함수를 열 번 호출한다면,
프로그램은 그 함수의 사본을 프로그램의 코드 안에 열번이나 삽입해야 한다.
그래서 인라인 함수의 사용은 신중하게 결정해야 한다.
** 함수 자체의 실행시간과 함수 호출 과정을 처리하는 시간을 비교해야 한다.
함수 코드 자체를 수행하는 데 걸리는 시간이 : A
함수 호출의 과정을 처리하는 데 걸리는 시간 : B
에 비해 매우 길다면 (A >>> B)
전체적으로 절약되는 시간은 거의 없다.
함수 코드를 수행하는 데 걸리는 시간 : A
이 매우 짧을 경우에만 ( A <<< B)
인라인 함수를 사용하는 것이 일반 함수를 사용하는 것보다 시간이 절약된다.
그러나 다른 한편으로 인라인 함수의 사용은 상대적으로 빠른 함수 호출 과정의 이점을 죽이는 것이다.
그렇기 때문에 빈번하게 호출되는 함수가 아니라면 절대적인 시간 절약은 그다지 크다고 볼 수 없다.
-> 굳이 쓸 것이라면 빈번하게 호출되는 함수에 쓰자
그리고 인라인 함수를 사용하려면 2가지 작업 중 한 가지는 해야 한다.
1. 함수 선언 앞에 inline 키워드를 붙인다.
2. 함수 정의 앞에 inline이라는 키워드를 붙인다.
일반적으로는 원형을 아예 생략하고 원형이 놓일 자리에 함수 정의 전체를 놓는 것이다.
함수의 사용 예시다.
#include <iostream>
inline void Hello() {
cout << "Hello, World" << endl;
}
int main() {
Hello();
Hello();
return 0;
}
인라인함수는 아래처럼 쓰고 싶다고 선언하는 것과 마찬가지이다.
#include <iostream>
int main() {
cout << "Hello, World" << endl;
cout << "Hello, World" << endl;
return 0;
}
'프로그래밍 지식 > C++' 카테고리의 다른 글
C++문법/ 디폴트 매개변수, Default Parameter (0) | 2021.11.30 |
---|---|
C++문법/ 참조 변수, reference + 참조의 특성 (1) | 2021.11.29 |
C++문법/ 가상, Virtual (+ Override) (2) | 2021.11.24 |
C++문법/ 생성자와 소멸자 , Constructor & Destructor (0) | 2021.11.24 |
C++문법 / 문자열 함수를 위한 cctype (0) | 2021.11.17 |