2012-02-08 16 views
5

संभव डुप्लिकेट:
C/C++: Optimization of pointers to string constantsस्ट्रिंग संदर्भ डुप्लीकेट हैं?

मान लीजिए आप एक स्ट्रिंग "example" स्थानों के एक बहुत में परिभाषित

// module1.h 
char *x = "example"; 
// module2.h 
char *a[] = { "text", "example" }; 
// module3.c 
printf("example"); 
//etc. 

इस डेटा दोहराया जाएगा होगा या संकलक बनाता होगा है इसके लिए केवल एक संदर्भ?

+0

कंपाइलर/लिंकर और विकल्पों पर निर्भर करता है। मेरा मानना ​​है कि पूरे कार्यक्रम अनुकूलन और एक स्मार्ट लिंकर डुप्लिकेट को जोड़ देगा लेकिन संदर्भ सामग्री को याद नहीं करेगा। – JimR

उत्तर

8

क्या करेंगे यह कार्यान्वयन निर्भर है। लेकिन वह स्ट्रिंग अक्षर की अपरिवर्तनीय संपत्ति की भावना थी।

स्ट्रिंग शाब्दिक पर C99 दलील से हवाला देते हुए:

"स्ट्रिंग शाब्दिक परिवर्तनीय होने की आवश्यकता नहीं है इस विनिर्देशन कार्यान्वयन समान पाठ साथ तार की प्रतियां साझा करने के लिए, पढ़ने में स्ट्रिंग शाब्दिक रख सकते हैं। केवल स्मृति, और कुछ अनुकूलन करने के लिए "

0

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

2

यह एक "कार्यान्वयन विस्तार" है। इसका मतलब है कि कुछ स्मार्ट कंपाइलर्स स्मृति में तारों को एकजुट करेंगे जबकि अन्य अलग-अलग प्रतियां बनायेंगे।

और अंत में, कुछ compilers कुछ संकलक विकल्प और अन्य विकल्पों के साथ अन्य बातों के साथ एक बात ...

+0

यह * कार्यान्वयन परिभाषित नहीं है * इस अर्थ में कि कार्यान्वयन को इस कार्यान्वयन विवरण को दस्तावेज करने की आवश्यकता नहीं है (जैसा कार्यान्वयन परिभाषित व्यवहार के साथ आवश्यक है) लेकिन निश्चित रूप से यह कार्यान्वयन निर्भर है। – ouah

+0

@ouah दूसरे शब्दों में, इसे अनियंत्रित होने के रूप में दस्तावेज किया गया है ;-) – Neil

+0

@ouah - सूक्ष्म विवरण, और अच्छी स्पष्टीकरण। भ्रम से बचने के लिए जवाब संपादित किया। – rodrigo

संबंधित मुद्दे