Total Articles 494
일반적으로 recursion function의 경우에는 inline으로 컴파일되지 않는 것으로 알고 있습니다. 혹시나 해서 다음 코드로 테스트해 보았습니다.
[source code]
#include <stdio.h> int factorial(int n) { if (n <= 1) return n; return n * factorial(n - 1); } int main() { int n = factorial(2); printf("%d\n", n); }
[result]
2
[assembly]
; 11 : int n = factorial(2);
; 12 : printf("%d\n", n);
push 2
push OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
main 함수에서 factorial 함수를 호출하지 않고 컴파일 타임에 그 결과( factorial(2) == 2 )를 print의 인자로 집어 놓고 있는 것을 확인할 수 있습니다.
[결론]
factorial 함수의 인자가 큰 값이거나 인자가 가변일 때에는 factorial function을 직접 호출한다.
반면에 factorial 함수의 인자가 고정 값을 때에는 컴파일러가 알아서 최적화를 해 준다.
[download]
factorial_test.zip : Microsoft Visual Studio 2008 Release(/O2) 컴파일