g++의 경우 최적화 옵션 안 주면 그냥 런타임에 호출해버릴 수도 있나보네요
fibonacci(45)를 그냥 출력하게 해놓고 컴파일 및 실행보니
최적화 옵션 안 줄땐 오래 걸려 실행되고
-O2로 주니까 바로 실행되네요
다만 fibonacci 값을 컴파일 시간에 알려져야하는 문맥에 위치시키니 최적화 관계 없이 바로 실행되네요
컴파일되기 위해서는 최적화고 뭐고 무조건 컴파일 때 계산해야하는 경우라 그런가보네요
그나저나 피보나치값이 컴파일 때 계산될 때의 컴파일 시간이랑, 런타임 때 계산될 때의 런타임 시간이랑 비교해보면 컴파일 때 하는게 압도적으로 빠르네요
컴파일러가 더 효율적으로 계산하나요?
캐싱이라도 하나보지
그런가보네요 너무 빨리 컴파일되더라고요 알아서 메모이제이션 들어가나봐요
함수 반환값도 캐싱이됨?? 첨알았네;;
일반적인 상황에서는 따로 구현해주지 않으면 그런거 없는 것 같고요 위같은 식으로 컴파일러한테 계산을 맡겼을 때 그런걸 해줘서 컴파일 시간이 단축되지 않았나 하는 추측이에요
순수함수라는것만 증명되면 캐싱 하는게 효율적이니 컴파일러들도 하겠죠? - return 0;