/*
 http://sosal.tistory.com/
 * made by so_Sal
 */


인라인 함수 : 일반적인 함수를 호출할 때, 새로운 스택을 생성하여 프로그램 카운트 루틴을
                   새롭게 시작하게 되는데, 이경우 성능 저하를 초래하게 된다.
                   인라인 함수는 실제 함수를 호출하는것이 아닌, 정의된 함수가
                   호출시기의 루틴에 그대로 코드를 옮겨놓는것과 같은 결과를 만들어 낸다.

정의를 보고도 잘 이해가 안가면, 간단한 예제를 통해서 쉽게 이해하실 수 있습니다.

/*
 * 아래는 사용자가 작성한 코드입니다.
 * 함수에 inline 속성을 주었습니다.
 */


#include<iostream>
using namespace std;

inline void print(){
    cout<<"this is inline function"<<endl;
}

int main(){
    print();
    return 0;
}

/*
 * 아래의 코드는, 위 사용자가 작성한 코드를
 * 컴퓨터 입장에서 보는 소스입니다.
 */


#include<iostream>
using namespace std;

int main(){
    cout<<"this is inline function"<<endl;
    return 0;
}


일반적인 함수는 실행 루틴이 함수를 위한 스택으로 오가는 동작과, 매개변수를 복사하는
과정에서 상당히 많은 부하(overhead)가 발생하게 되는데, inline 함수를 이용하면
이러한 작업을 필요로 하지 않기 때문에, 시간을 벌 수 있습니다.

하지만, inline 속성을 붙였다고 해서, 모두 인라인 함수가 되는것은 아닙니다.
컴퓨터는 inline 속성이 붙어있는 경우, 불필요한 동작을 최소로 실행하기 위해 노력합니다.



아래는 inline 함수가 클레스에서 정의될 때 유의할 점 입니다.

* 클레스 내부에서 정의한 멤버 함수들은 모두 자동으로 inline 속성을 가집니다.
* 클레스 외부에서 정의한 멤버 함수들은 inline 속성을 따로 추가해줘야 합니다.
* 클레스 외부에서 inline 속성을 지닌 함수를 정의할 경우, 정의하는 함수 코드는
  클레스 선언부가 존재하는 파일에 들어있어야 합니다.


Posted by sosal sosal

댓글을 달아 주세요