बेशक कोई बहस नहीं है कि यह सी मानकों में है। तो एक अनुपालन संकलक इस तरह से व्यवहार करने की उम्मीद है।
यह क्यों किया गया था इसके पीछे तकनीकी कारण सी स्टार्टअप कोड कैसे काम करता है इस पर रूट किया जा सकता है। आमतौर पर कई मेमोरी सेगमेंट होते हैं जिन्हें लिंकर को कोड (टेक्स्ट) सेगमेंट, ब्लॉक स्टोरेज सेगमेंट और प्रारंभिक वैरिएबल सेगमेंट सहित कंपाइलर आउटपुट डालना पड़ता है।
गैर स्थैतिक फ़ंक्शन चर के पास भौतिक संग्रहण नहीं है जब तक कि फ़ंक्शन का दायरा रनटाइम पर नहीं बनाया जाता है, इसलिए लिंकर उनसे कुछ भी नहीं करता है।
पाठ्यक्रम कोड (या पाठ) सेगमेंट में पाठ्यक्रम कोड चला जाता है लेकिन मान वैश्विक और स्थैतिक चर प्रारंभ करने के लिए उपयोग किया जाता है। प्रारंभिक चर स्वयं (यानी उनके पते) आरंभिक मेमोरी सेगमेंट में जाते हैं। अनियंत्रित वैश्विक और स्थैतिक चर ब्लॉक स्टोरेज (बीएसएस) सेगमेंट में जाते हैं।
जब प्रोग्राम निष्पादन समय पर लोड होता है, तो कोड का एक छोटा टुकड़ा सी रनटाइम वातावरण बनाता है। रोम आधारित सिस्टम में यह मूल्य कोड (टेक्स्ट) सेगमेंट से शुरुआती चर के रैम में अपने संबंधित वास्तविक पते में कॉपी करेगा। रैम (यानी डिस्क) आधारित सिस्टम प्रारंभिक मान सीधे अंतिम रैम पते पर लोड कर सकते हैं।
सीआरटी (सी रनटाइम) भी बीएसएस को शून्य करता है जिसमें सभी वैश्विक और स्थिर चर शामिल हैं जिनके प्रारंभिक नहीं हैं। यह संभवतः अनियमित डेटा के खिलाफ सावधानी के रूप में किया गया था। यह एक अपेक्षाकृत सीधा ब्लॉक भरने का ऑपरेशन है क्योंकि सभी वैश्विक और स्थैतिक चर एक पते खंड में एक साथ फंस गए हैं।
पाठ्यक्रम तैरता के
और डबल्स मई विशेष हैंडलिंग की आवश्यकता होती है, क्योंकि उनके 0.0 मूल्य सब शून्य बिट्स नहीं किया जा सकता है, तो चल प्रारूप आईईईई नहीं है 754
ध्यान दें कि जब से autovariables कार्यक्रम लोड करते समय मौजूद नहीं है वे रनटाइम स्टार्टअप कोड द्वारा प्रारंभ नहीं किए जा सकते हैं।
स्रोत
2010-07-30 16:24:53
फिर से खोलने के लिए वोट दिया गया क्योंकि यह प्रश्न यह भी पूछता है कि कुछ कंपाइलर स्थिर चर को शून्य नहीं करते हैं या नहीं। इसका जवाब है हाँ! कुछ डोमेन-विशिष्ट कंपाइलर सभी मानकों के अनुरूप नहीं हैं। उदाहरण के लिए, टीआईजीसीसी (टीआई -8 9/9 2/वी 200 कैलकुलेटर के लिए एक सी कंपाइलर), एक स्पष्ट वैरिएबल के साथ एक वैश्विक चर (उदाहरण के लिए 'स्थैतिक int high_score = 0;') प्रोग्राम के रनों में संरक्षित किया जाएगा (जब तक कि यह संग्रहीत न हो फ्लैश मेमोरी में), प्रोग्राम सेटिंग्स को बनाए रखने के लिए एक सरल लेकिन आलसी तरीका प्रदान करना। –