1. 개요

매크로 함수는 흔히 일반 함수보다 빠르다.

그 이유는 컴파일 이전에 코드가 변환되기 때문이다.

일반적인 함수가 가지는 호출 과정이 없기 때문에 속도에서 좋은 성능을 나타낸다.


하지만 때론 매크로 함수는 치명적인 버그나 속도 저하의 원인이 된다.


여기서는 매크로 함수의 성능 저하를 살핀다.


2. 문제

다음 매크로 함수가 재귀에서 사용될 때, 성능 저하를 보여라. 

#define MAX(x,y) ((x) > (y) ? (x) : (y))


3. 코드

3-1) 코드

3-2) 시간 측정 코드


3-3) 데이터 사이즈 10 수행시간


3-4) 데이터 사이즈 20 수행시간


3-5) 데이터 사이즈 30 수행시간


고작 데이터 사이즈 차이 10에 따라서 어마어마하게 수행시간이 증가한다.


4. 정리


일반적인 최대값 찾기 알고리즘은 데이터가 수 십만개에서도 최대값을 순식간에 찾아낸다.


하지만 매크로 함수와 재귀와 섞이면서 코드 수행시간의 어마어마한 증가가 일어난다.


그 이유는 아마도 컴파일 전에 코드 변환이 일어나면서 코드 변환이 재귀적으로 증가하기 때문이라고 생각한다.


그렇기에 고작 아주 작은 데이터 사이즈인 10, 20, 30에서도 수행시간의 폭증이 일어난다.



결론


매크로 함수의 사용은 함수 호출 시간이 없다는 이점이 있으나 자칫 잘못하면 찾아내기 무척 어려운 버그가 발생할 수 있다.


그러므로 매크로 함수를 사용할 때 꼼꼼히 따져보고, 


성능적인 이슈가 반드시 필요하지 않다면 매크로 함수보다 일반적인 함수를 사용하자.



+ Recent posts