2010-09-26 17 views
5

डीएल अवधारणा के अलावा जो रन-टाइम पर लोडिंग/अनलोडिंग विधियों या कार्यों की क्षमता प्रदान करता है, मुझे आश्चर्य है कि एक कंपाइलर कभी कुछ कह सकता है, ठीक है क्योंकि कोड के इस विशेष भाग को कोड सेगमेंट में काफी मात्रा में स्थान लगता है और प्रोग्राम निष्पादन के दौरान इस बिंदु के बाद कभी भी उपयोग नहीं किया जा रहा है, प्रोग्राम निष्पादन के दौरान उस विशेष बिंदु तक पहुंचने के बाद कोड सेगमेंट के उस भाग को अनलोड करने के लिए कुछ कोड उत्पन्न करना अच्छा होगा ताकि कोड सेगमेंट द्वारा ली गई कुल जगह कम हो जाए। क्या यह सिर्फ काल्पनिक है या ऐसा हो सकता है?क्या एक कंपाइलर निष्पादन के दौरान कोड सेगमेंट के हिस्सों को अनलोड करने के लिए कोड उत्पन्न कर सकता है?

+2

+1 दिलचस्प प्रश्न – delnan

उत्तर

3

एक कंपाइलर कुछ भी कर सकता है, जब तक वह मानक का उल्लंघन नहीं करता है। अगर यह पता लगाया जा सकता है कि कोड को फिर कभी नहीं कहा जाता है, तो यह इसे पूरी तरह से हटा सकता है।

यह इसे एक छोटे स्टब फ़ंक्शन के साथ भी बदल सकता है जो कोड को फिर से लोड करेगा, इसकी आवश्यकता थी।

लेकिन आपको कभी भी यह देखने की संभावना नहीं होगी कि एक आधुनिक ओएस में ओएस स्वयं कवर के तहत उस क्षमता को प्रदान करता है।

ऑपरेटिंग सिस्टम (कम से कम आम वाले) आपके भौतिक पृष्ठों को स्वैप कर देंगे जब स्मृति कम हो जाती है, और उन्हें तब तक पुनः लोड नहीं किया जाएगा जब तक उन्हें आवश्यकता न हो (आमतौर पर उन्हें एक्सेस करने का प्रयास करते समय पेज गलती से)।

1

मुझे एक कंपाइलर नहीं पता जो यह करता है, लेकिन इसमें कोई नियम निषिद्ध नहीं है। यदि संकलक साबित कर सकता है कि ऐसा करने से प्रोग्राम के अर्थशास्त्र को नहीं बदला जाएगा, तो इसे नियम के तहत अनुमति दी जाती है।

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

4

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

कंप्यूटर पर कम स्मृति होने पर ओवरलेइंग अधिक आम था, उदा। डॉस के प्रारंभिक दिनों में जहां आपके पास 640K था और अक्सर यह भी नहीं था। इन दिनों इसमें अभी भी एम्बेडेड सिस्टम के लिए एप्लिकेशन हैं जहां स्मृति और/या पता स्थान प्रीमियम पर हैं।

3

हां, विंडोज डिवाइस ड्राइवर्स इस तकनीक का उपयोग करते हैं। LE file प्रारूप में कुछ कोड खंडों को अस्वीकार्य के रूप में चिह्नित किया गया है। ओएस निश्चित रूप से कोड सेगमेंट को स्वैप करने का निर्णय ले सकता है जिसका उपयोग लंबे समय तक नहीं किया गया है।

हालांकि, यह कड़ाई से बोलने के लिए कंपाइलर के लिए क्षेत्र नहीं है। यह ज्यादातर लिंकर/लोडर/ओएस है जो इसे प्रभावित करता है।

+0

एक्सईई और डीएलएल द्वारा उपयोग किए जाने वाले अधिक सामान्य पीई प्रारूप में छोड़ने योग्य कोड खंड भी मौजूद हैं। कंपाइलर निश्चित रूप से यहां एक भूमिका है; यह विशिष्ट खंडों में कार्य करता है। लेकिन इसमें थोड़ी सी बात है, जैसा आपने नोट किया था: एक ओएस उन सभी पठनीय पृष्ठों को त्याग सकता है जो पुनः लोड करने योग्य हैं, और उन पृष्ठों को त्याग देंगे जिन्हें हाल ही में छुआ नहीं गया है। – MSalters

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

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