인라인 함수

함수를 호출하면 스택메모리 사용이 증가하고 매개변수 때문에 메모리 복사가 일어난다.또 제어흐름도 이동해야 한다. 내부적으로 많은 연산들이 일어나는 것이다.

그래서 보통 이러한 함수 호출로 인한 오버헤드를 극복하고자 매크로를 사용한다.

특히 단순한 것임에도 불구하고 관리 상의 목적 때문에 함수로 만들어진 코드를 매크로로 변환할 경우 무시할 수없는 수준의 성능 향상을 기대해볼 수 있다.

하지만 본질적으로 매크로는 함수가 아니기때문에 매개변수형식을 지정할 수도 없고, 많은 논리적 오류를 발생시킬 수도 있다.



그래서 탄생한 것이 인라인 함수 이다 .

인라인 함수는 매크로의 장점과 함수의 장점을 두루 갖춘 함수이다.일반적인 함수 호출은 함수 주소로 갔다가 함수처리가 끝나면 다시 원래의 주소로 되돌아 오는 방식으로 시간이 오래걸린다.하지만 인라인 함수는 함수 호출없이 함수 코드를 함수호출 자리에서 처리하므로 함수를 수행하기 위해 함수가 있는 주소로 갔다가 되돌아 올 필요가 없어 속도면에서 유리하다.

문법도 간단하다. 함수 원형 앞에 inline 이라는 예약어만 붙이면 된다.

그렇다면 모든 함수가 인라인함수이면 더 좋지않을까? 라는 생각이 든다.

가능하다면 모두 인라인함수로 처리하면 좋겠지만 그렇지 않은 경우도 존재할것이다.

같은 코드가 기계어에서 계속 반복해서 나올 테니 코드의 길이가 일정 수준 이상 길어지면 인라인 함수가 되는 것은 바람직하지않다. 바람직한 코드 길이는 컴파일러가 정한다.

Visual Studio에서 솔루션탐색기 ->프로젝트이름 -> 속성 에서 구성속성 -> C/C++ -> 최적화를 누르면 [인라인 함수확장] 항목의 설정값이 기본값으로 지정되어있다. 이것은 Visual Studio에서는 컴파일 할경우 함수가 인라인함수로 선언되지 않거나, 인라인함수가 일반함수로 선언된경우 알아서 확장,축소해서 컴파일한다.

'C++' 카테고리의 다른 글

C++입출력 속도, 성능 개선  (0) 2018.04.30
C++, C와 무엇이 다를까  (0) 2018.04.30

+ Recent posts