शीर्षक में बस, एक संगत स्मृति ब्लॉक क्या है?एक संगत स्मृति ब्लॉक क्या है?
उत्तर
किसी भी पते पर किसी भी अंतराल के बिना। आप शायद इसे "ब्लॉक" के रूप में सोच सकते हैं, और मध्य में एक अंतर के साथ कुछ "दो ब्लॉक" के रूप में सोच सकते हैं।
यह शब्द एक सरणी की परिभाषा में "संगत" होने के रूप में आता है। इसका मतलब है कि तत्वों को अंत तक अंत तक रखा जाता है, जिनमें कोई विचलन नहीं होता है और उनके बीच कोई पैडिंग नहीं होती है (प्रत्येक तत्व के अंदर पैडिंग हो सकती है, लेकिन तत्वों के बीच नहीं)। तो 5 4 बाइट तत्वों की एक सरणी इस तरह दिखता है (बाइट प्रति 1 अंडरस्कोर वर्ण, | प्रतीकों स्मृति का प्रतिनिधित्व नहीं करते):
____ ____ ____ ____ ____
|____|____|____|____|____|
यह इस तरह नहीं दिखता है:
____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|
और न इसे इस तरह दिखता है:
____ ____ ____ ____ ____
|____|____|____| ... somewhere completely different ... |____|____|
सभी मामलों में, "लगता है" का अर्थ है "जहाँ तक सी में दिखाई दे रहा पतों का संबंध है"। कुछ वर्चुअल एड्रेस स्पेस में संगत हो सकता है, लेकिन भौतिक RAM में संगत नहीं है। उस मामले के लिए, भौतिक रैम पता स्थान में कुछ संगत हो सकता है, लेकिन वास्तव में भौतिक RAM में आसन्न नहीं है। इसमें से आधा यहां एक रैम चिप पर हो सकता है, और दूसरा आधा वहां एक और रैम चिप पर हो सकता है। लेकिन सी मेमोरी मॉडल उसमें से कोई भी "देख" नहीं सकता है।
स्मृति की एक ब्लॉक जो अन्य स्मृति द्वारा बाधित नहीं है। या अधिक सटीक होने के लिए इसे वर्चुअल एड्रेस-स्पेस के एक निर्बाध ब्लॉक की आवश्यकता होती है। असली रैम का समर्थन करने वाले स्थान को संबोधित करने की आवश्यकता नहीं है।
यदि आप एक बड़ी मेमोरी ब्लॉक आवंटित करते हैं तो यह महत्वपूर्ण है। ओएस को आपको एक संगत ब्लॉक के रूप में देना है, लेकिन यदि स्मृति इतनी खंडित है कि केवल छोटे टुकड़े मुक्त हैं तो यह स्मृति आवंटन संतुष्ट नहीं हो सकता है भले ही कुल खाली स्मृति अनुरोधित स्थान से बड़ी हो।
यह 64 बिट ऐप्स पर इतनी बड़ी समस्या नहीं है क्योंकि पता स्थान वहां बड़ा है। लेकिन 32 बिट प्रक्रियाओं में यह हो सकता है कि ढेर इतनी खंडित हो जाती है (मुक्त ब्लॉक के बीच अभी भी मुक्त ब्लॉक हैं) कि बड़े आवंटन विफल हो जाते हैं।
मेमोरी आवंटित करने के संदर्भ में उत्तर देते समय, जब आप मेमोरी आवंटक का आह्वान करते हैं और स्मृति के 24 बाइट्स का अनुरोध करते हैं, तो यह कम से कम 24 बाइट्स को आवंटित स्मृति के एक ब्लॉक को ढूँढने में सक्षम होना चाहिए।
यह एक पते x
पर शुरू स्मृति के 16 बाइट्स और एक अन्य 8 बाइट्स एक पते पर शुरू है, तो y
ऐसी है कि y > x + 16
या y < x - 8
(कि एक अंतर पैदा करेगा), तो संभाजक 24 बाइट्स के लिए आपके अनुरोध के बावजूद संतुष्ट नहीं कर सकते कुल 24 बाइट मुक्त हैं।
Fragmentation भी देखें।
एक मेमोरी ब्लॉक बिल्कुल संगत होता है जब इसे एक रैखिक पता स्थान से प्रारंभ और अंत पता द्वारा परिभाषित किया जाता है और इसमें कोई छेद नहीं होता है।
यह, पांच बाइट्स की एक सन्निहित स्मृति खंड है स्थान 1 से स्थान से 5 फैले:
यह बाइट (हल्के नीले रंग में) का प्रतिनिधित्व करता है कि कोई अंतराल के साथ स्मृति में एक साथ हैं बाइट्स (सफेद) उनके बीच।
यह बाइट्स (पीला) के तीन समूहों में खंडित है, अंतराल के साथ स्थान 1 से शुरू बाइट्स समूहों के बीच वर्तमान:
यह ब्याज के पांच बाइट्स का एक गैर-निरंतर सेट है। अंतर बाइट्स स्थान 4 और 6 पर हैं।
+1 :) – Michael
+1 अच्छी आकृति। –
@ शिनान: धन्यवाद, मैं काम करता हूं। उस प्रतिक्रिया के लिए –
+1, क्लासिक। –