inline 함수

C & C++ 관련 : 2007. 12. 6. 12:09
반응형

안녕하세요. inline함수를 공부하고있는데요...


궁금한점이 있어서 질문을 드립니다.


에.. 그러니깐..


인라인 함수를 선언하게 될때 어떡해야 하는지...


그러니깐요..


처음 선언 부분만


inline void func(void);


이렇게 선언 해놓고 main()함수 뒤에 함수 정의 부분에서


inline 를 붙이지 않고 void func (void){ ... }이렇게 만 정의해줘도 되는건가요?


아니면 선의나 정의부분에 둘다 inline를 붙어줘야 하는건가요?





inline void func(void); <-위와 같이 선언 하셨으면 ,

main()함수 내에서 쓸때는 inline 를 붙이지 않고

 func (void)<-함수를 호출하고 매가 변수 값만 넘겨 주면 됩니다.

인라인 함수는 함수내의 코드가 짧을때 쓰는 것으로 알고 있습니다.

함수를 여러번 호출할 상황이 있다고 하면

함수를 호출을하고 그 함수가 종료되면

수행을 하다가 함수호출 부분을 만나면 다시 그 함수로 이동을 해서

수행을 하겠지요.. <- 말이 참 복잡하네요~~ ;;

위와 같이 수행을 하면은 반복적으로 수행을 하니깐 시간이 좀 걸리지요

하지만 인라인 함수는 함수를 찾아가서 수행하는 것이 아니라 함수 코드를 직접

복사를 해서 사용하기 때문에 이동하는 시간이 걸리지 않습니다.

그래서 코드가 짧은 것에만 사용을 하조.. 코드가 길면 많은 양을 복사 해야하기 때문에요~~ ㅋㅋ


  이만 허접 답변 이었습니다..`~


inline함수를 쓰면 클래스가 간결해진다고 하는대요 그리고 더 효율적이라고하더라구요

근대 인라인 함수 써도 도통 좋은 점을 모르겟어요. 다만 함수 앞에 인라인 이라는 키워드 추가해서

더 복잡해 보이는대요


간단하게 말하면 장점은 function call이 생략되는 형태로 실행되기 때문에 function call에 의한
여러 가지 오버헤드 - CPU register 백업, stack 관리 - 등을 생략하기 때문에
간단하면서 자주 사용되는 함수에는 더 빠른 효율성을 갖게 됩니다.

하지만 항상 더 좋은 퍼포먼스를 보장하는 것은 아닙니다.
지나친 inline함수의 사용은 실행파일이 커지게 하고,
이 때문에 페이지 폴트를 야기하는 원인이 되어 퍼포먼스가 떨어지게 됩니다.

C의 #define을 이용하는 것과 비슷하지만 안정성인 측면에서 inline함수가 앞섭니다.

다음은 정리된 설명입니다.


 * inline함수
    - 매크로함수와 그냥 함수의 중간적인 성격을 띤 함수이다.


    - 일반적인 함수를 사용하면 필요할 때마다 호출하여 사용하므로 실행파일의 크기를

     줄일 수 있으나 제어권의 이동이 심하므로 실행 속도가 느려진다.


     - 매크로 함수는 컴파일시 전개되어 치환되므로 제어권 이동이 발생하지 않으므로

     속도가 빠르지만 데이터형 지정을 할 수가 없고 실행파일의 용량이 커지게 된다.


    - 인라인 함수는 컴파일시 통째로 매크로처럼 전개되어 속도면에서 큰 이득을 얻는다.

     그리고 데이터형 체크를 할 수 있는 함수이다.
     용량이 커지는 단점이 있긴 하지만 간단한 작업을 하는 함수의 경우에 이용하면 매우

     편리하다.

 

 * inline 함수의 제약조건
    - inline 함수 내에서는 루프문(do whie, while, for), switch, goto문을 사용할 수 없다.
    - inline 함수호출시 호출되기 전에 먼저 inline 함수가 정의되어 있어야 한다.
    - inline 함수 내에서 재귀호출을 할수 없다.
    - inline 함수는 한 수식 내에서 두 번이상 호출될수 없다.
    - 함수 포인터로 inline 함수의 주소를 취할 수 없다.
    - inline 함수는 호출방식이 아니라 치환전개방식이기 때문이다.



영어 보시는 데에 지장이 없으시면
http://camars.kaist.ac.kr/~jaewon/special/c++-faq/inline-functions.html
를 참조하시면 더 많은 정보가 있습니다.



반응형

'C & C++ 관련' 카테고리의 다른 글

u8,u16...  (0) 2007.12.14
변수 형태,extern  (0) 2007.12.06
extern  (0) 2007.12.06
Posted by Real_G