सी-स्टाइल भाषाओं में डायनेमिक मेमोरी एलोकेशन के लिए रनटाइम हीप का उपयोग क्यों किया जाता है और डेटा संरचना दोनों को "हीप" कहा जाता है? क्या कुछ रिश्ता है?
सी-स्टाइल भाषाओं में डायनेमिक मेमोरी एलोकेशन के लिए रनटाइम हीप का उपयोग क्यों किया जाता है और डेटा संरचना दोनों को "हीप" कहा जाता है? क्या कुछ रिश्ता है?
जवाबों:
डोनाल्ड नुथ कहते हैं (द आर्ट ऑफ़ कंप्यूटर प्रोग्रामिंग, थर्ड एड।, खंड 1, पृष्ठ 435)।
उपलब्ध स्मृति के पूल को "ढेर" कहने के लिए कई लेखकों ने 1975 से शुरुआत की।
वह यह नहीं कहता है कि कौन से लेखक और किसी भी विशिष्ट पत्र का संदर्भ नहीं देते हैं, लेकिन कहते हैं कि प्राथमिकता वाले कतारों के संबंध में "हीप" शब्द का उपयोग शब्द का पारंपरिक अर्थ है।
उनके पास एक ही नाम है लेकिन वे वास्तव में समान नहीं हैं (यहां तक कि वैचारिक रूप से)। एक मेमोरी हीप को एक हीप कहा जाता है, उसी तरह आप कपड़े धोने की टोकरी को "कपड़े का ढेर" कहते हैं। यह नाम कुछ गड़बड़ जगह को इंगित करने के लिए उपयोग किया जाता है, जहां मेमोरी आवंटित की जा सकती है और वसीयत में निपटाया जा सकता है। डेटा संरचना (जैसा कि विकिपीडिया लिंक आप संदर्भ बताते हैं) काफी अलग है।
नाम टक्कर दुर्भाग्यपूर्ण है, लेकिन यह सब रहस्यमय नहीं है। ढेर एक छोटा, सामान्य शब्द है जिसका उपयोग ढेर, संग्रह, समूह, आदि के लिए किया जाता है। डेटा संरचना के लिए शब्द का उपयोग प्री-डेट्स (मुझे पूरा यकीन है) मेमोरी के पूल का नाम है। वास्तव में, पूल मेरी राय में, बाद के लिए एक बेहतर विकल्प होगा। हीप एक ऊर्ध्वाधर संरचना (ढेर की तरह) को दर्शाता है, जो डेटा संरचना के साथ फिट बैठता है, लेकिन मेमोरी पूल नहीं। हम मेमोरी-पूल के ढेर को श्रेणीबद्ध नहीं मानते हैं, जबकि डेटा संरचना के पीछे मूलभूत विचार सबसे बड़ा तत्व हीप (और उप-ढेर) के शीर्ष पर है।
डेटा संरचना को ढेर करने के लिए 60 के दशक के मध्य में वापस आता है; स्मृति पूल, 70 के दशक के प्रारंभ। हीप (अर्थ मेमोरी पूल) शब्द का इस्तेमाल कम से कम 1971 के शुरुआती दौर में विजगार्डन द्वारा अल्गोल की चर्चा में किया गया था ।
संभवतः डेटा संरचना के रूप में हीप का जल्द से जल्द उपयोग सात साल पहले
विलियम्स, JWJ 1964 में पाया जाता है । "एल्गोरिथम 232 - हीप्सॉर्ट", एसीएम 7 (6) का संचार : 347-348
दरअसल, मेमोरी को आवंटित करने के तरीके के बारे में पढ़ना ( बडी ब्लॉक देखें ) मुझे डेटा संरचनाओं में एक ढेर की याद दिलाता है।
IMO यह केवल एक दुर्घटना / संयोग है कि इन दो पूरी तरह से असंबंधित चीजों का एक ही नाम है। इसका ग्राफ और ग्राफ की तरह ।
उपलब्ध मेमोरी आवंटन खोजने के एल्गोरिथ्म द्वारा हीप जैसी डेटा संरचना का उपयोग किया जाता है। निम्नलिखित http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html से लिया गया है ।
जब
new
इसे लागू किया जाता है, तो यह एक मुफ्त मेमोरी ब्लॉक की तलाश शुरू करता है जो आपके अनुरोध के लिए आकार में फिट बैठता है। यह मानते हुए कि स्मृति का ऐसा ब्लॉक पाया जाता है, इसे आरक्षित के रूप में चिह्नित किया जाता है और उस स्थान पर एक संकेतक लौटा दिया जाता है। इसे पूरा करने के लिए कई एल्गोरिदम हैं, क्योंकि आपकी वस्तु के आकार की तुलना में सबसे छोटे मुक्त ब्लॉक को खोजने या स्मृति को फिट करने की आवश्यकता वाले पहले वाले को वापस करने के लिए पूरी मेमोरी को स्कैन करने के बीच एक समझौता करना पड़ता है। मेमोरी के ब्लॉक होने की गति में सुधार करने के लिए, एक ढेर नामक बाइनरी पेड़ों के समान डेटा संरचना में मेमोरी के मुक्त और आरक्षित क्षेत्रों को बनाए रखा जाता है।
बोलचाल की शर्तें स्टैक मेमोरी और हीप मेमोरी C ++ मानक में उपयोग नहीं की जाती हैं। मानक स्थैतिक भंडारण, थ्रेड स्टोरेज, स्वचालित भंडारण और गतिशील भंडारण का उपयोग करता है।
मानक के संग्रहण अवधि अनुभाग में अधिक पाया जा सकता है ।
इसलिए, भाषा और मानक पुस्तकालय के दृष्टिकोण से, कोई भ्रम नहीं है।
Q. एक ढेर क्या है? A. ढेर एक दूसरे के ऊपर वस्तुओं के स्थान का एक संग्रह है।
आपके प्रश्न का उत्तर: मेमोरी हीप और बाइनरी हीप दोनों एक ही अवधारणा का उपयोग करते हैं जैसा कि आप जानते हैं। डेटा को प्रोग्राम में लिखे अनुसार उसी क्रम में मेमोरी में एक ढेर के रूप में संग्रहीत किया जाता है, जबकि बाइनरी हीप एक डेटा संरचना है जो एक हीप में डेटा को स्टोर करने के तरीके में समान अवधारणा का अनुसरण करता है (डेटा ऑन टॉप) दूसरे का)। मुझे पता है कि आप टिप्पणी अनुभाग में क्या सोचते हैं।
शायद लागू की गई पहली मेमोरी हीप को ढेर संरचना द्वारा प्रबंधित किया गया था?