कंपाइलर (उदा। जीसीसी) const
और static const
वैरिएबल को आवंटित करता है, जैसा कि यह रहता है? डेटा मेमोरी या प्रोग्राम मेमोरी में?कॉन्स बनाम स्टेटिक कॉन्स
उत्तर
यह आपके सिस्टम पर निर्भर करता है, और आप चर का उपयोग कैसे करते हैं। static
चर के लिए:
केस 1: आप चर का कभी भी उपयोग नहीं करते हैं, और संकलक चुपचाप इसे छोड़ देता है। यह extern
चर के साथ नहीं हो सकता है।
केस 2: आप चर का उपयोग करते हैं, लेकिन आप इसका पता कभी नहीं लेते। कंपाइलर चर के उपयोग को तत्काल ऑपरेटरों में परिवर्तित करता है, जैसे कि यह #define
या enum
था। कंपाइलर अभी भी extern
स्थिर को तत्काल संचालन में परिवर्तित कर सकता है, लेकिन इसे अभी भी इसके लिए एक पता होना चाहिए।
केस 3: आप चर का उपयोग और उसका पता लेते हैं, संकलक वस्तु कोड में यह डाल करने के लिए, बिल्कुल के रूप में अगर यह extern
थे एक जगह खोजने के लिए मजबूर किया जाता है।
"डेटा" बनाम "प्रोग्राम" मेमोरी के लिए, ठीक है, यह आपके द्वारा उपयोग की जा रही प्रणाली के लिए बहुत विशिष्ट है। मेरे लिनक्स x64/ईएलएफ सिस्टम पर, इसे शायद .rodata
सेक्शन में रखा जाएगा, जो कोड (.text
) के समान सेगमेंट में जाता है, लेकिन रीड-राइट डेटा सेक्शन (.bss
, .data
) से एक अलग सेगमेंट है। मेरा सिस्टम केवल पढ़ने योग्य गैर निष्पादन योग्य डेटा के लिए एक अलग सेगमेंट नहीं बनाना प्रतीत होता है।
Addendum: ध्यान दें कि व्यवहार C++ में भिन्न है। सी ++ में, const
वैरिएबल में डिफ़ॉल्ट रूप से आंतरिक संबंध होता है, इसलिए static const
अनावश्यक है और बाहरी लिंकेज के साथ स्थिरता प्राप्त करने के लिए extern const
आवश्यक है।
डाइट्रिच ने पहले ही static
चर के मामले को समझाया है।
स्थानीय चर के लिए संकलक कार्यान्वयन में const
योग्य चर के आवंटन के लिए कई विकल्प हैं जहां पता लिया जाता है। यह ढेर या स्थिर स्मृति में आवंटित किया जा सकता है या नहीं। यह विशेष रूप से const
योग्य यौगिक अक्षर के मामले में है। ऐसे दो अक्षरों के पते जिन्हें स्थानीय रूप से अलग-अलग क्षेत्रों में घोषित किया जा सकता है, उन्हें एक में तब्दील किया जा सकता है और उनके पते बराबर तुलना कर सकते हैं।
- 1. कॉन्स बनाम नई कॉन्स
- 2. उद्देश्य सी कॉन्स एनएसएसटींग * बनाम एनएसएसटींग * कॉन्स
- 3. कॉन्स शुद्धता: कॉन्स चार कॉन्स * कॉन्स गेटनाम कॉन्स (// सामान);
- 4. टेम्पलेट मेटाप्रोग्रामिंग - एनम हैक और स्टेटिक कॉन्स
- 5. PHP5: कॉन्स बनाम स्थैतिक
- 6. कॉन्स स्ट्रिंग बनाम #define
- 7. स्थिर कॉन्स बनाम #define
- 8. कॉन्स (टी कॉन्स *)
- 9. वर्चुअल फ़ंक्शन कॉन्स बनाम वर्चुअल फ़ंक्शन गैर-कॉन्स
- 10. "बाहरी कॉन्स" बनाम "बाहरी" केवल
- 11. कॉन्स रेफ
- 12. कॉन्स रेफरेंस
- 13. सी ++ और कॉन्स - एक कॉन्स संदर्भ
- 14. कॉन्स unordered_map
- 15. कॉन्स पैरामीटर
- 16. कॉन्स (सी ++)
- 17. कॉन्स डेटा
- 18. सी ++ स्ट्रिंग अक्षर बनाम कॉन्स स्ट्रिंग्स
- 19. सी # में कॉन्स और स्टेटिक के बीच क्या अंतर है?
- 20. 'एलपीसीडब्लूआरटी {उर्फ कॉन्स wchar_t *}' को 'एलपीसीस्ट्रेट {उर्फ कॉन्स char *}
- 21. इसके गैर-कॉन्स संस्करण
- 22. पब्लिक कॉन्स स्ट्रिंग?
- 23. एमएसवीसी कॉन्स एनम प्रकार
- 24. एनएसएसटींग को कॉन्स char
- 25. सी ++ "कॉन्स" कीवर्ड स्पष्टीकरण
- 26. कॉन्स std :: स्ट्रिंग संदर्भ
- 27. सी ++ कॉन्स पोजीशनिंग
- 28. अर्थशास्त्र और कॉन्स संदर्भ
- 29. कॉन्स char * [] घोषणा
- 30. # परिभाषित या कॉन्स स्ट्रिंग *