को सरणी स्थिर अवधि की जा रही है के मामले में (किया जाएगा वैश्विक चर), मैं कहूंगा कि पहला सबसे ज्यादा पसंद है, क्योंकि इसे किसी भी कोड की आवश्यकता नहीं है - इसे रनटाइम-पर्यावरण द्वारा प्रारंभ किया जाता है।
यदि चर स्वचालित अवधि (स्थानीय चर) का है, तो कौन सा बेहतर है, यदि कोई अन्य से बेहतर है, तो कंपाइलर पर निर्भर करता है। सबसे अधिक संभावना है, दोनों बहुत समान होंगे।
स्वचालित भंडारण अवधि चर के लिए कॉम्लेक्सिटी सभी मामलों के लिए ओ (एन) है। स्थिर स्थिति अवधि चर के लिए पहला मामला ओ (1) है।
बेशक, यदि आप मूल्य 5 के साथ सरणी भरना चाहते हैं, तो दूसरा विकल्प बहुत बेहतर है क्योंकि इसे स्रोत फ़ाइल में 10000 5
लिखने की आवश्यकता नहीं है।
आप यह भी पा सकते हैं कि memset(array, 0, sizeof(array));
का उपयोग कर संकलक के आधार पर दोनों से बेहतर है। यह अभी भी ओ (एन) है, लेकिन सरणी को भरने में वास्तविक समय छोटा हो सकता है, क्योंकि memset
आपके लूप केस [और प्रारंभिक चर के लिए क्या करता है] के मुकाबले बेहतर अनुकूलित किया जा सकता है। memset
या तो 5
के साथ सरणी भरने के लिए काम नहीं करेगा।
आप सभी सरणी में मान 5 सेट करने के लिए std::fill(array, &array[10000], 5);
का भी उपयोग कर सकते हैं, और कंपाइलर को अनुकूलित करने का एक अच्छा काम करना चाहिए।
अंत में, मुझे यह इंगित करना चाहिए कि इस तरह की चीजें केवल तभी मायने रखती हैं जब वे कोड में कर रहे हैं जो बहुत कुछ निष्पादित हो जाता है। यह लंबे समय तक है क्योंकि 40 केबी डेटा भरने से काफी समय लगता है कि वास्तव में चिंता करने के लिए पर्याप्त समय लगता है। 20+ साल की तरह।
स्रोत
2013-04-17 16:08:56
स्थिर या स्वचालित अवधि का 'सरणी' है? –
मैं दोनों स्थितियों की तलाश में था। –