c एक संगत स्मृति ब्लॉक क्या है?




memory heap (4)

शीर्षक में बस, एक संगत स्मृति ब्लॉक क्या है?


एक मेमोरी ब्लॉक बिल्कुल संगत होता है जब इसे एक रैखिक पता स्थान से प्रारंभ और अंत पता द्वारा परिभाषित किया जाता है और इसमें कोई छेद नहीं होता है।


पते में किसी भी अंतराल के बिना यह कब्जा कर लेता है। आप शायद इसे "ब्लॉक" के रूप में सोच सकते हैं, और मध्य में एक अंतर के साथ कुछ "दो ब्लॉक" के रूप में सोच सकते हैं।

यह शब्द एक सरणी की परिभाषा में "संगत" होने के रूप में आता है। इसका मतलब है कि तत्वों को अंत तक अंत तक रखा जाता है, जिनमें कोई विचलन नहीं होता है और उनके बीच कोई पैडिंग नहीं होती है (प्रत्येक तत्व के अंदर पैडिंग हो सकती है, लेकिन तत्वों के बीच नहीं)। तो 5 4-बाइट तत्वों की एक सरणी इस तरह दिखती है (प्रति बाइट 1 अंडरस्कोर चरित्र, प्रतीक स्मृति का प्रतिनिधित्व नहीं करते हैं):

 ____ ____ ____ ____ ____
|____|____|____|____|____|

यह ऐसा नहीं दिखता है:

 ____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|

और न ही यह ऐसा दिखता है:

 ____ ____ ____                                           ____ ____
|____|____|____| ... somewhere completely different ...  |____|____|

सभी मामलों में, "जैसा दिखता है" का अर्थ है "जहां तक ​​सी में दिखाई देने वाले पते चिंतित हैं"। कुछ वर्चुअल एड्रेस स्पेस में संगत हो सकता है, लेकिन भौतिक RAM में संगत नहीं है। उस मामले के लिए, भौतिक रैम पता स्थान में कुछ संगत हो सकता है, लेकिन वास्तव में भौतिक RAM में आसन्न नहीं है। इसमें से आधा यहां एक रैम चिप पर हो सकता है, और दूसरा आधा वहां एक और रैम चिप पर हो सकता है। लेकिन सी मेमोरी मॉडल उसमें से कोई भी "देख" नहीं सकता है।


स्मृति का एक ब्लॉक जो अन्य स्मृति द्वारा बाधित नहीं है। या अधिक सटीक होने के लिए इसे वर्चुअल एड्रेस-स्पेस के एक निर्बाध ब्लॉक की आवश्यकता होती है। असली रैम का समर्थन करने वाले स्थान को संबोधित करने की आवश्यकता नहीं है।

यदि आप एक बड़ी मेमोरी ब्लॉक आवंटित करते हैं तो यह महत्वपूर्ण है। ओएस को आपको एक संगत ब्लॉक के रूप में देना है, लेकिन यदि स्मृति इतनी खंडित है कि केवल छोटे टुकड़े मुक्त हैं तो यह स्मृति आवंटन संतुष्ट नहीं हो सकता है भले ही कुल खाली स्मृति अनुरोधित स्थान से बड़ी हो।

यह 64 बिट ऐप्स पर इतनी बड़ी समस्या नहीं है क्योंकि पता स्थान वहां बड़ा है। लेकिन 32 बिट प्रक्रियाओं में यह हो सकता है कि ढेर इतनी खंडित हो जाती है (मुक्त ब्लॉक के बीच अभी भी मुक्त ब्लॉक हैं) कि बड़े आवंटन विफल हो जाते हैं।


यह पांच बाइट्स का एक संगत स्मृति ब्लॉक है, जो स्थान 1 से स्थान 5 तक फैला हुआ है:

यह बाइट्स (रंगीन हल्का नीला) का प्रतिनिधित्व करता है जो स्मृति में एक साथ होते हैं, उनके बीच कोई अंतर बाइट (सफेद) नहीं होता है।

यह ब्याज के पांच बाइटों का एक गैर-संगत सेट है:

यह 4 और 6 स्थानों पर अंतर बाइट्स के साथ बाइट्स (रंगीन पीला) के तीन समूहों में विभाजित है। स्थान 1 से शुरू होने से स्थान 1 से 3 तक फैले तीन बाइट्स का एक संगत ब्लॉक होता है। प्रत्येक बाइट के दो और ब्लॉक होते हैं क्रमशः 5 और 7 स्थानों पर।

स्थान 0 पर अप्रयुक्त ब्लॉक के साथ-साथ स्थान 7 से परे किसी भी बाद के ब्लॉक को अनदेखा किया जा सकता है क्योंकि वे स्थान 1 से 7 तक फैले ब्याज के बाइट्स के बीच हस्तक्षेप करते हैं।





heap-fragmentation