जब कोई प्रक्रिया शुरू होती है तो उसे अपना वर्चुअल एड्रेस स्पेस मिलता है। वर्चुअल एड्रेस स्पेस का आकार आपके ऑपरेटिंग सिस्टम पर निर्भर करता है। सामान्य 32 बिट प्रक्रियाओं में 4 जीआईबी (4 गीगा बाइनरी) पते प्राप्त होते हैं और 64 बिट प्रक्रियाओं को 18 ईआईबी (18 एक्सा बाइनरी) पते मिलते हैं।
आप किसी भी तरह से किसी भी तरह से एक्सेस नहीं कर सकते जो आपके वर्चुअल एड्रेस स्पेस में मैप नहीं किया गया है, क्योंकि किसी भी परिभाषा के अनुसार मैप नहीं किया गया है, वहां आपके लिए कोई पता नहीं है। आप अपने वर्चुअल एड्रेस स्पेस के उन क्षेत्रों तक पहुंचने का प्रयास कर सकते हैं जिन्हें वर्तमान में किसी भी चीज़ से मैप नहीं किया गया है, इस मामले में आपको एक सेगफॉल्ट अपवाद मिलता है।
किसी भी समय किसी भी पते की जगह किसी भी स्थान पर मैप की गई नहीं है। इसके अलावा इसमें से सभी को मैप नहीं किया जा सकता है (इसमें से कितना मैप किया जा सकता है प्रोसेसर और ऑपरेटिंग सिस्टम पर निर्भर करता है)। वर्तमान पीढ़ी इंटेल प्रोसेसर पर आपके पता स्थान के 256 टीआईबी तक मैप किया जा सकता है। ध्यान दें कि ऑपरेटिंग सिस्टम इसे और सीमित कर सकते हैं। उदाहरण के लिए 32 बिट प्रक्रियाओं (4 जीबीबी पते तक) विंडोज़ डिफ़ॉल्ट रूप से सिस्टम के लिए 2 जीबी और आवेदन के लिए 2 जीबी रिजर्व के लिए विंडोज़ (लेकिन सिस्टम के लिए इसे 1 जीबीबी और एप्लिकेशन के लिए 3 जीबी बनाने का एक तरीका है)।
पता स्थान का कितना उपयोग किया जा रहा है और एप्लिकेशन चलाने के दौरान मैप किए गए परिवर्तनों में कितना परिवर्तन होता है। ऑपरेटिंग सिस्टम विशिष्ट उपकरण आपको मॉनीटर करने के लिए वर्तमान में आवंटित स्मृति और वर्चुअल एड्रेस स्पेस की निगरानी करने की अनुमति देंगे।
कोड अनुभाग, डेटा अनुभाग, बीएसएस इत्यादि वे शब्द हैं जो लिंकर द्वारा बनाई गई निष्पादन योग्य फ़ाइल के विभिन्न क्षेत्रों को संदर्भित करते हैं। सामान्य कोड में स्थिर अपरिवर्तनीय डेटा से अलग होता है जो स्थिर आवंटित लेकिन परिवर्तनीय डेटा से अलग होता है। ढेर और ढेर उपरोक्त सभी से अलग हैं। उनके आकार की गणना कंपाइलर और लिंकर द्वारा की जाती है। ध्यान दें कि प्रत्येक बाइनरी फ़ाइल में अपने स्वयं के अनुभाग होते हैं, इसलिए किसी भी गतिशील रूप से जुड़े पुस्तकालयों को पता स्थान में अलग-अलग मैप किया जाएगा, जिसमें प्रत्येक के अपने स्वयं के अनुभाग मैप किए जाएंगे। हालांकि, ढेर और ढेर बाइनरी छवि का हिस्सा नहीं हैं, आम तौर पर प्रति प्रक्रिया केवल एक ढेर और एक ढेर होता है।
ढेर का आकार (कम से कम प्रारंभिक ढेर) आमतौर पर तय किया जाता है। कंपाइलर्स और/या लिंकर्स में आमतौर पर कुछ झंडे होते हैं जिन्हें आप रनटाइम पर इच्छित स्टैक के आकार को सेट करने के लिए उपयोग कर सकते हैं। आम तौर पर ढेर "पिछड़ा हो जाते हैं" क्योंकि प्रोसेसर स्टैक निर्देशों का काम करता है। ढेर एक दिशा में बढ़ने के साथ-साथ दूसरे में बढ़ने से परिस्थितियों में स्मृति को व्यवस्थित करना आसान हो जाता है जहां आप दोनों को असहज होना चाहते हैं लेकिन यह नहीं पता कि प्रत्येक कितना बढ़ सकता है।
सामान्य रूप से हीप, उस प्रक्रिया को संदर्भित करता है जो प्रक्रिया शुरू होने पर पूर्व-आवंटित नहीं होता है। निम्नतम स्तर पर कई लॉजिकल ऑपरेशंस हैं जो ढेर प्रबंधन से संबंधित हैं (सभी को लागू नहीं किया गया है क्योंकि मैं यहां सभी ऑपरेटिंग सिस्टमों में वर्णन करता हूं)।
जबकि पता स्थान तय किया गया है, कुछ ओएस ट्रैक करते हैं कि वर्तमान में कौन से हिस्सों को इस प्रक्रिया द्वारा पुनः दावा किया गया है। यहां तक कि यदि यह मामला नहीं है, तो प्रक्रिया को स्वयं ही इसका ट्रैक रखने की आवश्यकता है। तो निम्नतम स्तर का संचालन वास्तव में यह तय करना है कि पता स्थान का एक निश्चित क्षेत्र उपयोग किया जा रहा है।
दूसरा निम्न स्तर का ऑपरेशन ओएस को उस क्षेत्र को किसी चीज़ पर मैप करने का निर्देश देना है।सामान्य रूप में यह
कुछ स्मृति जाता है कि swappable नहीं
स्मृति कि swappable और प्रणाली स्वैप फ़ाइल
स्मृति कि swappable है को मैप किया और कुछ अन्य फ़ाइल
को मैप किया है हो सकता है
मेमोरी जो स्वीकार्य है और कुछ अन्य फाइलों को मैप किया गया है केवल पढ़ने के लिए मोड
ही मानचित्रण है कि एक और आभासी पते क्षेत्र
ही मानचित्रण है कि एक और आभासी पता क्षेत्र के लिए मैप किया गया है करने के लिए मैप किया गया है, लेकिन में केवल पढ़ने के लिए मोड
ही मानचित्रण है कि एक और आभासी पता क्षेत्र के लिए मैप किया गया है , लेकिन डिफॉल्ट स्वैप फ़ाइल को मैप किया प्रतिलिपित डेटा से राइट मोड पर नकल में
वहाँ अन्य संयोजन मैं भूल गया हो सकता है, लेकिन जो मुख्य हैं।
बेशक कुल स्थान का उपयोग वास्तव में इस पर निर्भर करता है कि आप इसे कैसे परिभाषित करते हैं। वर्तमान में उपयोग की जाने वाली रैम वर्तमान में मैप किए गए पता स्थान से अलग है। लेकिन जैसा कि मैंने उपरोक्त लिखा है, ऑपरेटिंग सिस्टम निर्भर उपकरण आपको वर्तमान में क्या हो रहा है यह पता लगाने देना चाहिए।
कोई प्रोग्रामिंग प्रश्न नहीं है। – unwind