1) प्रत्येक प्रक्रिया में 4 जीबी वर्चुअल मेमोरी स्पेस होता है, लेकिन इसे एक बार में आवंटित करने की आवश्यकता नहीं होती है। ऑपरेटिंग सिस्टम MMU को निर्दिष्ट करता है कि भौतिक मेमोरी के कौन से हिस्से अपनी वर्चुअल स्पेस में मैप किए जाते हैं, और किन हिस्सों को मैप नहीं किया जाता है। मैप किए गए हिस्सों तक पहुंच प्रोसेसर को गलती करने का कारण बनती है और ऑपरेटिंग सिस्टम आमतौर पर एक सेगफॉल्ट उत्पन्न करता है। "उपस्थित नहीं" के लिए एक मार्कर भी है जो प्रोसेसर को बताता है कि स्मृति का क्षेत्र भौतिक मेमोरी स्पेस में नहीं है लेकिन स्वैप स्पेस में है, इसलिए प्रोसेसर दोष और ऑपरेटिंग सिस्टम पेज को भौतिक मेमोरी में वापस ले जाता है, फिर फिर से शुरू होता है प्रक्रिया जहां यह छोड़ा गया। एक प्रक्रिया पृष्ठ तालिका का वर्णन करने के लिए, आपको केवल स्मृति के कुछ बाइट्स की आवश्यकता होती है, इसलिए 100 प्रक्रियाएं उस स्मृति को तब तक उपयोग नहीं करती जब तक वे वास्तव में इसका अनुरोध नहीं करते।
2) कई स्मृति आवंटन एल्गोरिदम हैं। आम तौर पर ऑपरेटिंग सिस्टम केवल एक समय में स्मृति के बड़े ब्लॉक आवंटित करता है, और इसलिए malloc() को कॉल करता है, कभी-कभी ऑपरेटिंग सिस्टम को कॉल करने के परिणामस्वरूप, अधिकांश समय यह सी मानक लाइब्रेरी कार्यान्वयन विवरण है जो माइक्रोमैनेजमेंट को संभालता है। इस बात की कोई गारंटी नहीं है कि सरणी की सीमाओं से बाहर पहुंच सेग गलती उत्पन्न होगी, क्योंकि यह पहले से मॉलोकैड की गई एक अलग सरणी का हिस्सा हो सकता है, या मुक्त स्थान का हिस्सा जो कि मानक पुस्तकालय भविष्य के लिए ट्रैक रख रहा है आवंटन और इसलिए segfault नहीं होगा। डिबगिंग उपकरण जैसे वालग्रिंड हैं जो ऐसी त्रुटियों का पता लगाएंगे।
3) प्रत्येक सेगमेंट कहां स्थित है, इस बारे में विवरण ऑपरेटिंग सिस्टम निर्भर है, लेकिन सामान्य और पोर्टेबल कोड के लिए, जानने की कोई आवश्यकता नहीं है।
इन सभी विषयों पर अधिक जानकारी के लिए osdev विकी, paging और memory allocation पर विशेष रूप से भाग से परामर्श करें।
चूंकि किसी ने इससे पहले यह नहीं देखा है, तो यह ध्यान दिया जाना चाहिए कि यदि आप 2-बाइट सरणी आवंटित करते हैं, तो [2] उस सरणी का हिस्सा नहीं होगा, केवल एक [0] और एक [1] होगा। –
क्या मॉलोक हर बार सेगमेंटेशन देगा। चूंकि मॉलोक ढेर से अंतरिक्ष आवंटित करेगा और फिर ढेर का आकार सामान्य रूप से बहुत बड़ा होता है तो हम एक [2] तक पहुंचने में सक्षम क्यों नहीं हैं? इसे कुछ यादृच्छिक मूल्य देना चाहिए। सेगमेंटेशन का मतलब है कि हम उस तक पहुंच नहीं पा रहे हैं। अगर मैं गलत हूं तो मुझे सही करें – RATHI
यह वास्तव में आपकी मशीन और कंपाइलर पर निर्भर करता है। लेकिन, नीचे की रेखा यह है कि यदि आपने अपने प्रोग्राम के उपयोग के लिए स्मृति आवंटित नहीं की है, तो आपको इसे एक्सेस या परिवर्तित नहीं करना चाहिए। –