किसी सरणी की लंबाई को स्पष्ट रूप से एक सरणी के साथ संग्रहीत करने के पीछे तर्क क्या था C
?
जिस तरह से मैं इसे देखता हूं, ऐसा करने के लिए बहुत सारे कारण हैं लेकिन मानक (C89) के समर्थन में बहुत सारे नहीं हैं। उदाहरण के लिए:
- एक बफर में लंबाई उपलब्ध होने से बफर ओवररन को रोका जा सकता है।
- एक जावा-शैली
arr.length
दोनों स्पष्ट है और प्रोग्रामर कोint
कई सरणियों से निपटने पर स्टैक पर कई एस बनाए रखने से बचाती है - फंक्शन पैरामीटर अधिक अस्पष्ट हो जाते हैं।
लेकिन शायद मेरी राय में, सबसे प्रेरक कारण यह है कि आमतौर पर, कोई भी स्थान लंबाई को बनाए बिना बचा रहता है। मैं यह कहना चाहूंगा कि सरणियों के अधिकांश उपयोगों में गतिशील आवंटन शामिल है। सच है, ऐसे कुछ मामले हो सकते हैं जहां लोग स्टैक पर आवंटित एक सरणी का उपयोग करते हैं, लेकिन यह सिर्फ एक फ़ंक्शन कॉल * है - स्टैक 4 या 8 बाइट्स को अतिरिक्त रूप से संभाल सकता है।
चूंकि हीप मैनेजर को डायनेमिक रूप से आवंटित एरे द्वारा उपयोग किए जाने वाले फ्री ब्लॉक साइज को ट्रैक करना होता है, इसलिए उस सूचना को प्रयोग करने योग्य नहीं बनाया जाए (और अतिरिक्त नियम को जोड़ा जाए, संकलन समय पर जांचा जाए, कि जब तक कोई स्पष्ट रूप से लंबाई में हेरफेर नहीं कर सकता। पैर में अपने आप को गोली मारना पसंद है)।
दूसरी तरफ मैं केवल एक चीज सोच सकता हूं कि किसी भी लम्बाई पर नज़र रखने वाले ने संकलक को सरल नहीं बनाया है, लेकिन इतना सरल नहीं है ।
* तकनीकी रूप से, कोई स्वचालित भंडारण के साथ एक सरणी के साथ कुछ प्रकार के पुनरावर्ती कार्य लिख सकता है, और इस (बहुत विस्तृत) मामले में लंबाई को संग्रहीत करने से वास्तव में अधिक स्थान उपयोग हो सकता है।
malloc()
एड क्षेत्र का आकार पोर्टेबल तरीके से क्यों नहीं अनुरोध किया जा सकता है?" यह एक ऐसी बात है जो मुझे कई बार हैरान करती है।