अनुवाद इकाइयों में स्ट्रिंग शाब्दिक पता
सी और सी में, प्रोग्रामर अक्सर विभिन्न उद्देश्यों के लिए स्ट्रिंग अक्षर का उपयोग करते हैं। एक सामान्य प्रश्न उठता है: क्या यह मान लेना विश्वसनीय है कि विभिन्न अनुवाद इकाइयों में एक ही स्ट्रिंग अक्षरशः का मेमोरी पता समान होगा?
C/C मानक
C99 और सी ड्राफ्ट मानक विशेष रूप से इस विषय को अनिर्दिष्ट छोड़ देते हैं। C99 ड्राफ्ट मानक की धारा 6.4.5 में कहा गया है कि "यह अनिर्दिष्ट है कि क्या ये सरणियाँ [स्ट्रिंग शाब्दिक] अलग हैं, बशर्ते उनके तत्वों का उचित मान हो।" इसका मतलब यह है कि कंपाइलर यह तय करने के लिए स्वतंत्र है कि स्ट्रिंग अक्षर को पूल करना है या नहीं।
GCC:
-fmerge-constants ध्वज के साथ संकलन इकाइयों में स्ट्रिंग शाब्दिक पूलिंग का समर्थन करता है। इस व्यवहार को -fno-merge-constants के साथ अक्षम किया जा सकता है।व्यावहारिक विचार
सामान्य तौर पर, समान स्ट्रिंग अक्षर पर भरोसा करना पोर्टेबल नहीं है अनुवाद इकाइयों में स्मृति पता। हालाँकि, एक ही अनुवाद इकाई के भीतर, व्यवहार सुसंगत होने की अधिक संभावना है, क्योंकि कंपाइलर का अनुकूलन पर अधिक नियंत्रण होता है।
निष्कर्ष
ए का मेमोरी पता स्ट्रिंग लिटरल एक कार्यान्वयन विवरण है और अनुवाद इकाइयों में सुसंगत बने रहने के लिए इस पर भरोसा नहीं किया जा सकता है। इस तथ्य से अवगत होना और ऐसा कोड लिखना महत्वपूर्ण है जो ऐसे कार्यान्वयन विवरणों से स्वतंत्र हो।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3