GEMS 2권 인라인 VS 매크로

GEMS 2016. 1. 21. 21:52

인라인 함수의 장점

인라인 함수의 모든 매개변수들은 한 번만 평가된다.

#define square(x) (x*x)

이 매크로에 2+1을 넣으면 5가 된다. 인라인에서는 9가 된다.


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


inline이라는 키워드를 추가한다는 점을 제외하면 일반함수와 동일한 구문을 통해 정의된다.


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

매크로에 넘겨지는 표현식들은 두 번 이상 평가될 수 있으며, 그러면 안전하지 못한, 그리고 예기치 못한 부작용이 생길 수 있다.


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


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


매크로는 형이 자유롭지만 인라인 함수는 매개변수 형에 제한을 둔다. 하지만 템플릿을 이용하면 형에 자유로워질 수 있다.


인라인함수는 언제 사용하는가?

인라인 함수는 호출되는 곳마다 코드가 삽입되므로 프로그램의 크기가 매우 커진다.

코드 크기가 커지면 프로그램에 대한 메모리 요구량이 많아져서 캐시 적중 실패나 페이지 실패가 일어날 가능성이 높아진다.


- 작은 메서드들 - private멤버에 접근하는 메서드들

- 객체에 대한 상태정보를 돌려주는 함수들

- 작은 함수들 3~4줄짜리

- 자주호출되는 작은 함수들. 속도가 중요한 렌더링 루프안에서 호출되는 함수들


매크로는 언제 사용하는가?

#은 매크로 매개변수를 문자열 상수로 변환하는 문자열화 연산자이다.

작은 의사코드를 만들 때 매우 유용하다.


마이크로소프트에 국한된 사항

__inline 키워드는 컴파일러가 비용/이익을 분석을 수행하고 이익이 있을경우 함수를 인라인화 한다.

__forceinline 키워드는 함수를 항상 인라인으로 만들도록 강제한다.

위에 키워드를 쓰더라도 인라인을 적용하지 않을 때가 있다.








'GEMS' 카테고리의 다른 글

GEMS 2권 DLL로 부터 C++클래스 내보내기  (0) 2016.01.22
GEMS 2권 추상 인터페이스  (0) 2016.01.22
GEMS 2권 (1)  (0) 2016.01.21
GEMS 1권(4)  (0) 2016.01.20
GEMS 1권 (3)  (0) 2016.01.15
posted by 알쿠미