"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या स्ट्रिंग लिटरल का मेमोरी एड्रेस C और C++ में अनुवाद इकाइयों में सुसंगत है?

क्या स्ट्रिंग लिटरल का मेमोरी एड्रेस C और C++ में अनुवाद इकाइयों में सुसंगत है?

2024-11-13 को प्रकाशित
ब्राउज़ करें:424

Is the Memory Address of a String Literal Consistent Across Translation Units in C and C  ?

अनुवाद इकाइयों में स्ट्रिंग शाब्दिक पता

सी और सी में, प्रोग्रामर अक्सर विभिन्न उद्देश्यों के लिए स्ट्रिंग अक्षर का उपयोग करते हैं। एक सामान्य प्रश्न उठता है: क्या यह मान लेना विश्वसनीय है कि विभिन्न अनुवाद इकाइयों में एक ही स्ट्रिंग अक्षरशः का मेमोरी पता समान होगा?

C/C मानक

C99 और सी ड्राफ्ट मानक विशेष रूप से इस विषय को अनिर्दिष्ट छोड़ देते हैं। C99 ड्राफ्ट मानक की धारा 6.4.5 में कहा गया है कि "यह अनिर्दिष्ट है कि क्या ये सरणियाँ [स्ट्रिंग शाब्दिक] अलग हैं, बशर्ते उनके तत्वों का उचित मान हो।" इसका मतलब यह है कि कंपाइलर यह तय करने के लिए स्वतंत्र है कि स्ट्रिंग अक्षर को पूल करना है या नहीं।

GCC:

-fmerge-constants ध्वज के साथ संकलन इकाइयों में स्ट्रिंग शाब्दिक पूलिंग का समर्थन करता है। इस व्यवहार को -fno-merge-constants के साथ अक्षम किया जा सकता है।

    विजुअल स्टूडियो:
  • स्ट्रिंग शाब्दिक पूलिंग के लिए एक विकल्प (/GF) शामिल है।
  • अन्य कंपाइलर:
  • स्ट्रिंग शाब्दिक पूलिंग का समर्थन कर भी सकते हैं और नहीं भी, और यह कार्यान्वयन-विशिष्ट है।
  • आवश्यकता की कमी का तर्क
  • आवश्यकता की कमी का तर्क सी मानक में स्ट्रिंग अक्षर को पूल करने की आवश्यकता नहीं होना उस समय कंपाइलरों और रनटाइम वातावरण की विविधता के कारण है। कुछ कार्यान्वयनों ने स्ट्रिंग अक्षर को ROM में संग्रहीत किया, जबकि अन्य ने उन्हें लिखने योग्य डेटा अनुभागों में संग्रहीत किया। पोर्टेबिलिटी सुनिश्चित करने के लिए, किसी भी विशिष्ट व्यवहार को अनिवार्य नहीं करना सबसे अच्छा समझा गया।

व्यावहारिक विचार

सामान्य तौर पर, समान स्ट्रिंग अक्षर पर भरोसा करना पोर्टेबल नहीं है अनुवाद इकाइयों में स्मृति पता। हालाँकि, एक ही अनुवाद इकाई के भीतर, व्यवहार सुसंगत होने की अधिक संभावना है, क्योंकि कंपाइलर का अनुकूलन पर अधिक नियंत्रण होता है।

निष्कर्ष

ए का मेमोरी पता स्ट्रिंग लिटरल एक कार्यान्वयन विवरण है और अनुवाद इकाइयों में सुसंगत बने रहने के लिए इस पर भरोसा नहीं किया जा सकता है। इस तथ्य से अवगत होना और ऐसा कोड लिखना महत्वपूर्ण है जो ऐसे कार्यान्वयन विवरणों से स्वतंत्र हो।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3