'C++'에 해당되는 글 2건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

인라인(Inline) 함수


인라인(Inline) 함수는 함수를 호출하고 실행하는데 따르는 시간 오버헤드(overhead)를 없애기 위해서 도입되었다.


많은 처리 횟수를 가지는 반복문 안에 함수가 삽입되어 있는 경우,

반복문이 실행될 때마다 함수가 호출되고 실행되는 과정이 반복되므로 시간 오버헤드가 매우 가중된다.


이러한 비효율성을 방지하고자 도입된 것이 인라인 함수이다.


인라인 함수는 컴파일 시에 컴파일러가 함수 부분에 해당하는 코드들을 그대로 삽입함으로써 함수가 호출되는 과정을 생략하게끔 만들어준다. 즉, 함수 호출에 따른 시간 오버헤드가 없어지고 실행속도가 빨라진다.


인라인 함수를 만드는 방법은 간단히 함수 반환형 앞에 inline을 붙여주면 된다.


인라인 함수는 짧은 코드의 함수인 경우, 그리고 여러번 반복되어 사용되지 않는 함수의 경우에 유용하다.


여러번 반복되어 사용되는 함수의 경우, 컴파일 시 컴파일러가 그 함수에 해당하는 코드들을 해당 함수가 호출된 지점에 모두 삽입시켜버리므로 (눈에 보이지는 않지만) 코드 길이가 길어지고 인라인을 사용하지 않는 경우보다 더 비효율적이게 된다.


또한, 인라인 함수를 선언한 경우 함수의 선언과 정의 부분은 모두 같은 파일에 있어야 한다.

컴파일러는 컴파일 과정에서 파일 단위로 컴파일하며, 컴파일 도중 다른 파일을 참조하지 않기 때문이다.



'language > C|C++' 카테고리의 다른 글

데이터 상수화, 포인터 상수화  (0) 2016.07.21
SwitchViewDemo  (0) 2016.06.06
디폴트 대입연산자에 의한 문제점  (0) 2016.05.07
#pragma  (0) 2016.05.02
#ifdef, #endif,.. Preprocessor  (0) 2016.05.01
블로그 이미지

saylin

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifdef, #ifndef, #endif, #else, #if,.. 와 같은 지시어를 전처리기(Preprocessor)라 한다.


#ifdef는 if defined를 줄인 말이다. #ifndef는 #ifdef와는 반대로 if not defined를 의미한다.


#if, #elif, #else의 사용법은 if~ else if~ else를 사용하는 방법과 매우 유사하다.

이와 같은 전처리기는 헤더파일의 중복을 방지하거나 조건부 컴파일이 필요한 경우에 사용한다.


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#if A

...

#elif B

...


#else

...

#endif


A인 경우 아래 구문들을 처리하고, B인 경우 그 아래의 구문들을 처리하고

A와 B 조건 모두 아닌 경우, #else 아래의 구문들을 처리한다.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#ifdef A

...


#endif


A가 정의(#define)되어 있다면, 아래 구문을 처리하도록 한다.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#ifndef A

...


#endif

A가 정의되어 있지 않다면, 아래 구문을 처리하도록 한다.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#ifdef A

...


#else

...


#endif


A가 정의되어 있다면, #else 전까지의 구문을 처리하지만

A가 정의되어 있지 않다면, #else 이후의 구문을 처리하도록 한다.



'language > C|C++' 카테고리의 다른 글

데이터 상수화, 포인터 상수화  (0) 2016.07.21
SwitchViewDemo  (0) 2016.06.06
디폴트 대입연산자에 의한 문제점  (0) 2016.05.07
#pragma  (0) 2016.05.02
인라인(Inline) 함수  (0) 2016.05.02
블로그 이미지

saylin

,