2009-07-28 12 views
7

जैसा कि here पर चर्चा की गई है, एक स्थिर चर बीएसएस या डीएटीए सेगमेंट में संग्रहीत है।गतिशील रूप से जुड़े पुस्तकालयों (सी/सी ++) में स्थिर चर के व्यवहार

स्थिर स्मृति एक गतिशील रूप से लिंक्ड लाइब्रेरी में मौजूद फ़ंक्शन के अंदर है, तो यह स्मृति कहाँ संग्रहीत होती है? क्या इस चर के लिए भंडारण लिंकेज के समय लिंकिंग प्रक्रिया के बीएसएस या डीएटीए सेगमेंट में आवंटित किया जाता है?

उत्तर

7

स्थिर चर DLL फ़ाइल के .BSS या DATA अनुभाग में समाप्त होने जा रहा है। डीएलएल से लिंक करने वाले निष्पादन योग्य शायद यह भी नहीं पता होगा कि यह मौजूद है। जब EXE DLL लोड करता है, तो सिस्टम इसके लिए डीएलएल के डेटा अनुभाग सेट करता है, और उसके बाद DllMain() को कॉल करता है। यही वह समय है जब डीएलएल की स्थिरता अस्तित्व में आती है और शुरूआत होती है।

+0

तो, यदि मैं आपको सही ढंग से समझता हूं, यदि एकाधिक प्रक्रियाएं इस साझा लाइब्रेरी से लिंक करती हैं, तो वेरिएबल विभिन्न प्रक्रियाओं द्वारा इनवॉक्शंस में 'स्थैतिक' के रूप में व्यवहार करेगा? – nagul

+2

नहीं, प्रभावी रूप से डीएलएल का एक नया उदाहरण लोड होने वाली प्रत्येक प्रक्रिया के लिए लोड किया जाता है, इसलिए डेटा सेगमेंट प्रक्रियाओं के बीच साझा नहीं होते हैं। –

+0

समझा। डीएलएल को अपना खुद का मेमोरी अनुभाग मिलता है, और स्थैतिक चर वहां जाता है। – nagul

1

हां। स्थैतिक चर के विभिन्न प्रकार के बीच मतभेद हैं:

  • गुंजाइश

  • उन जो गतिशील रूप से प्रारंभ कर रहे हैं के लिए प्रारंभ समय।

कार्यान्वयन (और नोट बीएसएस और डेटा सेगमेंट कार्यान्वयन विवरण हैं) आमतौर पर वही होता है। गतिशील रूप से initilized स्थैतिक फ़ंक्शन चर के सही प्रारंभिकरण को सुनिश्चित करने के लिए, एक अतिरिक्त बूलियन जोड़ने का एक तरीका यह दर्शाता है कि गतिशील प्रारंभिकता की आवश्यकता है।

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

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