블로그 이미지
Do U Know.. What Luvis... Kevin.K

카테고리

분류 전체보기 (684)
끄적 (148)
SG (0)
사랑 (41)
영화 (111)
(10)
음악 (50)
IT (33)
영어 (195)
경제 (4)
정보 (21)
톡톡 (70)
기타 (1)
Total769,764
Today9
Yesterday22

달력

« » 2010.07
        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 31

최근에 달린 댓글

최근에 받은 트랙백

'inline'에 해당되는 글 1건

  1. 2007/06/29 inline 함수

inline 함수

IT/지식 / 2007/06/29 11:08

프로그램은 함수가 전부라고 해도 과언이 아닐겁니다.

어쩌면 함수의 홍수라고 부를 정도랄까요.....

적게는 몇십개 많게는 수천개의 함수가 필요할때마다 호출이 되면서 프로그램이 동작하게 되는 것입니다.

하지만 어플리케이션과 달리 게임은 속도가 굉장히 중요한 문제로 봉착하게 됩니다.

실시간 처리를 하게되는 게임 프로그램에서는 어플리케이션 처럼 코딩을 하게 되면 지옥을 보게 될지도 모릅니다.

이런 점 때문에 머리 좋은 사람들이 어떻게 하면 최적화를 할 수 있을것인가에 대해 연구를 많이 했습니다.

이번에 다룰 주제도 이거랑 비스무리한 경우입니다만 어플리케이션도 예외는 아니라고 할 수 있는 부분입니다.


매크로는 프로그램을 하시다 보면 종종 만나게 되는 구문입니다.

#define max(a,b) ((a) > (b) ? (a) : (b) )

이런걸 매크로라고 하죠. 만일 저런 구문을 굉장히 많이 쓰는 프로그램에서 저 한 줄은 코딩의 부담도 줄여주고 처리속도 빠르게 해주는 역활을 하게 될것입니다.

인라인 함수는 특별하게 쓰지 않는 이상 잘 안쓰게 되는 함수입니다. 쓰는 사람만 쓰는 함수라고나 할까요

함수 앞에 inline이라는 구문만 추가 해주면 그 함수는 인라인 함수가 됩니다.

inline 함수는 private 멤버 변수에 접근하기 위해서 쓰는 경우가 제일 많고... 그외에 간단한 동작을 하는 함수에 많이들 사용합니다.

또한 인라인 함수는 컴파일러에 따라 이득이 될것인가 안될것인가 판단하여 컴파일을 하는 것도 있습니다. 즉 최적화에 도움이 된다 할까나요.

* inline 선언에 의한 함수의 인-라인화

   - 컴파일러에 의해서 처리
   - 매크로 함수의 장점을 그대로 반영
   - 구현의 용이성 제공
   - 컴파일러에게 최적화의 기회제공

그럼 간단히 특징을 살펴보기로 합시다.


1. 인라인 함수의 장점

A. 인라인 함수는 일반 함수에 적용되는 모든 형 안정성 프로토콜들을 따릅니다.

따라서 예기치 않은 또는 (주1) 잘못된 인수(argument)들이 매개변수(parameter)로 전달되는 일이 생기지 않습니다..

B. 함수 선언 부분에 inline이라는 키워드를 추가한다는 점을 제외하면, 인라인 함수들은 다른 일반 함수들과 동일한 구문을 통해서 정의됩니다. 매크로보다는 좀 더 쉽다고 할까요 ^^;

C. 인라인 함수에 인수로서 전달된 표현식들은 함수 본문에 진입하기 전에 평가됩니다.

따라서 표현식들은 단 한 번만 평가됩니다. 매크로와는 달리 두번 평가되지 않으므로 안전하지 못한 예기치 못한 부작용이 생기지 않습니다.

#define max(a,b) ((a) > (b) ? (a) : (b) ) 에 max(++x,y)를 호출하고 x= 5, y=3이면 이 매크로는 6이 아니라 7을 돌려줍니다.

이는 표현식이 두번 평가되기 때문에 생기는 문제입니다.

D. 인라인 함수는 디버깅이 가능합니다. 함수이기 떄문에 당연한거 일수도 있습니다;;;

하지만 매크로는 파서가 코드를 해석하고 프로그램의 심볼 테이블을 만들기 전에 확장되므로 매크로 자체를 디버깅 하는 것은 불가능합니다.

E. 인라인 함수는 일반 함수 호출과 동일한 구문을 따르며 매개변수들이 예기치 않는 방식으로 수정되는 일이 없으므로 코드의 가독성과 관리 용이성을 증가 시킵니다.

(주1) C++표준을 따르면 인수와 매개변수는 구분되는 용어이다. 간단히 이야기 하면 매개변수는 함수 선언에 나오는 함수의 지역 변수이고 , 인수는 함수 호출 시에 그 변수에 넘겨주는 값(표현식)이라고 할 수 있다.  예를 들어 func(int n, const char *pc);의 n과 *pc는 매개변수, func(5*a, "hello");의 5*a와 "hello"는 인수에 해당된다.

인라인 함수는 함수 호출에 따른 부담(스택 프레임 설정, 매개변수 전달, 스택 프레임 복구, 결과반환 등등)이 없으므로 일반 함수에 비해 성능이 좋습니다. 또한 인라인 함수는 컴파일러가 코드를 좀 더 최적화할 수 있는 기회를 제공하게 됩니다. 인라인 함수는 코드로 치환 될때 삽입된 코드는 추가적인 최적화의 대상이 됩니다. 인라인 함수가 아닌 경우는 이런 최적화가 불가능합니다.


2. 인라인 함수의 단점

하지만 모든 함수를 인라인 함수로 만들수는 없습니다. 인라인 함수는 호출되는 곳마다 코드가 삽입되므로 프로그램의 전체 크기가 매우 커집니다. 코드 크기가 커지면 더 많은 메모리를 차지하게 되며 그러면 수행속도는 떨어지게 됩니다.

프로그램에 대한 메모리 요구량이 높아지면 캐시 적중 실패나 페이지 실패가 일어날수 있으며 이는 엄청난 CPU부담으로 이어지게 됩니다.


3. 인라인 함수 사용

작은 메서드들 PRIVATE데이터 멤버에대한 접근 메서드 객체에 대한 상태 정보를 돌려주는 함수
작은 함수 3줄이나 4줄
자주 호출되는 작은 함수 특히 속도가 중요한 랜더링 루프안에서 호출되는 함수들
인라인 함수나 매크로나 분명 코딩의 부담을 줄여주고 최적화와 빠른 실행을 보장하는 하나의 도구임은 확실합니다.

하지만 적절히 쓰는 경우에만 그런 동작을 보장할뿐 그 선택은 프로그래머의 몫이라고 할 수 있습니다.

요즘같이 빠른 속도를 보장하는 컴퓨터에서 이런 문제는 사소할 것일수도 있지만...이러한 것을 전혀 모른채로 코딩을 하여 그 문제가 누적되면 도저히 해결 할 수 없는 상황까지 가게 될지도 모릅니다.

잘쓰면 보약 못쓰면 독약이랄까요 ^^;

출처 : http://blog.naver.com/madosama?Redirect=Log&logNo=100017430806

미세한 차이같은거에는 별로 관심을 안두고 있었는데..;;
이제는 다 고려해야 한다는..;; 구찮앙..;;  (embedded 이다보니..)

'IT > 지식' 카테고리의 다른 글

윈도우 탐색기에서 오른쪽버튼으로 커맨드창(cmd) 바로가기  (1) 2007/07/19
HDMI와 HDCP란?  (1) 2007/07/12
inline 함수  (0) 2007/06/29
WOL(Wake On Lan) PC 원격 전원 관리  (4) 2007/01/04
XP 테마 바꿔주기  (4) 2007/01/02
gpedit.msc 그룹정책기가 없을때  (3) 2006/12/17
Posted by 비회원