반응형

** 본 게시물은 C++을 복습하며 정리하는 글입니다. 틀린 부분이 있다면 주저하지 마시고 바로 태클 걸어주세요!! 현재 "윤성우의 열혈강의 C++"교재로 공부중이며 좀 더 상세한 설명을 원하시는 경우에는 책을 구매해서 찾아보시길 권장합니다.




[들어가기 전]

'inline' 함수는 'in'과 'line'의 합성어로 'in'은 코드 내부를 의미하고 'line'은 프로그램 코드의 라인을 의미한다. 그러므로 인라인 함수는 프로그램 코드라인 안으로 들어간 함수라는 뜻이다.


우선 C언어의 '매크로'함수와 비교해보자.

"매크로 함수"의 장단점을 설명하자면 

장점) 일반 함수에 비해서 실행속도가 빠르다.

단점) 복잡한 함수를 매크로로 정의하는데 한계가 있다.

라고 할 수 있다.

 

그렇다면 매크로함수의 "빠른 속도를 가진 상태로 복잡한 함수도 정의할 수 있는 방법은 없을까??" 이러한 이유로 나온 함수가 바로 "인라인 함수"이다.




[예제]


ex)


출력결과)

5+7=12




[추가]


매크로를 이용한 함수의 인라인화는 전처리기에 의해서 처리됨. 그러나 키워드 inline을 이용한 함수의 인라인화는 컴파일러에 의해서 처리된다. 따라서 컴파일러가 함수의 인라인화가 오히려 성능저하의 요소가 된다고 판단 할 경우 이 키워드를 무시하기도 하며, 필요한 경우 일부 함수를 임의적으로 인라인 처리하기도 한다.


[개인적인 궁금함]

모든 함수를 인라인화해서 처리하면 프로그램이 빨라지지 않을까??


답변]

inline 화 한다는 것이 함수를 호출한 부분의 함수 내용을 끼워 넣는다고 볼 수 있습니다. 따라서 모든 함수를 inline 화 해버리면, 그 함수를 호출 할 때 마다 그 함수의 전체 내용이 들어가는 것이기 때문에 결과적으로 프로그램의 크기가 커지기 마련이죠..


inline 함수가 일반 함수보다 빠른 이유는 일반 함수의 경우 호출 할 때 약간의 작업을 하게 되므로 약간의 속도 향상이 있다고 볼 수 있습니다. 특히 함수를 inline 하는 경우는 함수 자체에서 처리하는 내용이 '매우' 적어서 일반 함수 호출시 선행되는 작업이 함수 본체 자체서 처리되는 작업보다 더 많은, 배보다 배꼽이 더 큰 일을 막기 위해 인라인 화를 하는 것입니다. 따라서 큰 함수의 경우 선행되는 작업의 크기가 상대적으로 본체에 비해 매우 적기 때문에 굳이 인라인 화 할 필요 없습니다.

답변 출처: http://itguru.tistory.com/99




[구글 코딩규약 퍼옴]

인라인 함수

link

함수가 작을 때, 이를테면 10라인이나 그 이하일 정도일 때만 함수를 인라인으로 정의하라.

정의:일반적인 함수 호출 매커니즘으로 호출하는 대신 컴파일러가 해당 함수를 인라인 처리할 수 있도록 함수를 선언할 수 있다.

장점:함수가 짧다면, 인라인 함수는 더 효율적인 오브젝트 코드를 생성할 수 있다. 접근자나 변경자 혹은 다른 작은 함수, 성능에 결정적인 함수들을 인라인하는데 부담을 가지지 말라.

단점:인라인을 과도하게 사용하면 프로그램을 실제 더 느리게 만들 수 있다. 함수 크기에 따라서 인라인을 하면 함수 크기에 따라 코드 크기가 커질 수도, 작아질 수도 있다. 아주 작은 접근자 함수를 인라인하면 보통 코드 크기를 작게 하지만, 반면 매우 큰 함수를 인라인하게 되면 코드 크기를 엄청나게 크게 만들 수 있다. 최근의 프로세서들은 인스트럭션 캐쉬를 더욱 잘 활용하기 때문에 작은 코드가 더 빨리 돈다.

결론:

괜찮은 판단방법은 길이가 10라인 이상인 함수는 인라인하지 않는 것이다. 소멸자를 주의하라! 소멸자는 함축적으로 멤버와 상위 클래스의 소멸자를 부르기 때문에 보이는 것보다 종종 길다.

또 하나의 괜찮은 판단방법이 있다. 반복문이나 switch 문이 있는 함수 (보통의 경우 절대 수행되지 않는 반복문이나 switch 문인 경우를 제외하고)를 인라인하는 것은 보통 효과적이지 않다.

함수가 인라인으로 선언되었다고 해서 항상 인라인되는 것은 아님을 유의하자. 예를 들면 가상 함수나 재귀 호출 함수는 보통 인라인되지 않는다. 일반적으로 재귀 호출 함수는 인라인되면 안 된다. 가상 함수를 인라인하는 이유는 접근자와 변경자의 경우처럼 주로 클래스 안에 정의를 넣기 위해서이며, 이는 편의 때문이거나, 하는 일을 문서화하기 위해서이다.


반응형
Posted by tislqhf

블로그 이미지
개인적인 공부자료 정리하는 공간
tislqhf

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.4
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함