मैं उन कॉन्स्ट्रेक्ट एक्सप्रेशन्स की कोशिश कर रहा हूं, जिनका संकलन समय पर किया गया है। लेकिन मैंने एक उदाहरण के साथ खेला जो संकलन के समय निष्पादित होने पर अविश्वसनीय रूप से तेज़ लगता है।
#include<iostream>
constexpr long int fib(int n) {
return (n <= 1)? n : fib(n-1) + fib(n-2);
}
int main () {
long int res = fib(45);
std::cout << res;
return 0;
}
जब मैं इस कोड को चलाता हूं तो इसे चलाने में लगभग 7 सेकंड लगते हैं। अब तक सब ठीक है। लेकिन जब मैं बदलने long int res = fib(45)
के लिए const long int res = fib(45)
तो यह और भी एक दूसरे नहीं लेता है। मेरी समझ से इसका संकलन समय पर मूल्यांकन किया जाता है।
लेकिन संकलन में लगभग 0.3 सेकंड लगते हैं
कंपाइलर इसका मूल्यांकन इतनी जल्दी कैसे कर सकता है, लेकिन रनटाइम में इसे इतना अधिक समय लगता है? मैं 5.4.0 gcc का उपयोग कर रहा हूँ।
fib
। आपके द्वारा ऊपर दी गई रिट्रेन्स संख्याओं का कार्यान्वयन धीमी गति से चलने वाला है। रनटाइम कोड में फ़ंक्शन मानों को कैशिंग करने का प्रयास करें और यह बहुत तेज़ होगा।