সি-স্টাইলের ভাষাগুলিতে এবং ডেটা স্ট্রাকচার উভয়কেই "হিপ" নামে ডাইনামিক মেমরি বরাদ্দকরণের জন্য রানটাইম হিপ ব্যবহার করা হয় কেন ? কিছু সম্পর্ক আছে কি?
সি-স্টাইলের ভাষাগুলিতে এবং ডেটা স্ট্রাকচার উভয়কেই "হিপ" নামে ডাইনামিক মেমরি বরাদ্দকরণের জন্য রানটাইম হিপ ব্যবহার করা হয় কেন ? কিছু সম্পর্ক আছে কি?
উত্তর:
ডোনাল্ড নুথ বলেছেন (কম্পিউটারের প্রোগ্রামিং, আর্ট অফ তৃতীয় সংস্করণ, খণ্ড। 1, পৃষ্ঠা 435):
বেশ কয়েকটি লেখক ১৯ available৫ সালের দিকে উপলভ্য মেমরির পুলটিকে "গাদা" হিসাবে বলতে শুরু করেছিলেন।
তিনি কোন লেখক কোন নির্দিষ্ট কাগজপত্রের উল্লেখ করেন না এবং বলেন না, তবে তিনি বলেন যে অগ্রাধিকারের সারিগুলির সাথে "গাদা" শব্দের ব্যবহার শব্দের প্রচলিত ধারণা।
তাদের একই নাম রয়েছে তবে তারা সত্যিকারের মতো নয় (এমনকি ধারণাগতভাবেও)। কোনও মেমোরি হিপকে হিপ বলা হয় একইভাবে আপনি লন্ড্রি ঝুড়িকে "কাপড়ের স্তূপ" হিসাবে উল্লেখ করেন। এই নামটি কিছুটা অগোছালো জায়গা নির্দেশ করতে ব্যবহৃত হয় যেখানে মেমরি বরাদ্দ করা যেতে পারে এবং ইচ্ছামতো বিচ্ছিন্ন করা যেতে পারে। ডেটা স্ট্রাকচার (উইকিপিডিয়া লিংক হিসাবে আপনি রেফারেন্স পয়েন্ট আউট) একদম আলাদা।
নামের সংঘর্ষ দুর্ভাগ্যজনক, তবে সমস্ত রহস্যজনক নয়। গাদা একটি ছোট, সাধারণ শব্দ যা একটি গাদা, সংগ্রহ, গোষ্ঠী ইত্যাদির অর্থ ব্যবহৃত হয় ডেটা কাঠামোর প্রাক-তারিখগুলির শব্দের ব্যবহার (আমি বেশ নিশ্চিত) মেমরির পুলের নাম। আসলে, আমার মতে পুলটি পরবর্তীকালের জন্য আরও ভাল পছন্দ হত। গাদা একটি উল্লম্ব কাঠামোকে বোঝায় (স্তূপের মতো), যা ডেটা কাঠামোর সাথে মানানসই, তবে মেমরি পুলের সাথে নয়। আমরা মেমোরি-পুলের হিপকে শ্রেণিবদ্ধ হিসাবে ভাবি না, যেখানে ডেটা কাঠামোর পিছনে মৌলিক ধারণাটি সবচেয়ে বড় উপাদানটিকে হিপের শীর্ষে (এবং সাব-হিপস) রাখছে।
ডেটা কাঠামোটি হিপ 60-এর দশকের মাঝামাঝি সময়ে; 70-এর দশকের শুরুর দিকে মেমরি পুলটি গাদা করুন। আলগলের আলোচনায় হিজ শব্দটি (অর্থাত মেমরি পুল) অন্তত একাত্তরের প্রথম দিকে উইজঙ্গার্ডেন ব্যবহার করেছিলেন ।
সম্ভবত প্রাচীনতম ব্যবহার গাদা একটি ডাটা স্ট্রাকচার যেমন সাত বছর আগে পাওয়া যায়
উইলিয়ামস, JWJ 1964 "অ্যালগরিদম 232 - Heapsort", এসিএম এর কমিউনিকেশনস 7 (6): 347-348
প্রকৃতপক্ষে, মেমোরিটি কীভাবে বরাদ্দ করা হয়েছে সে সম্পর্কে পড়া ( বাডি ব্লকগুলি দেখুন ) ডেটা স্ট্রাকচারের একটি স্তূপ সম্পর্কে মনে করিয়ে দেয়।
আইএমও এটি কেবল একটি দুর্ঘটনা / কাকতালীয় বিষয় যে এই দুটি সম্পূর্ণ সম্পর্কযুক্ত বিষয়টির একই নাম। এটি গ্রাফ এবং গ্রাফের মতো ।
গাদা-জাতীয় ডেটা কাঠামো উপলভ্য মেমরির বরাদ্দ সন্ধানের অ্যালগরিদম দ্বারা ব্যবহৃত হয়। নিম্নলিখিতটি http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html থেকে উদ্ধৃত হয়েছে ।
যখন অনুরোধ
new
করা হয়, এটি একটি নিখরচায় মেমোরি ব্লক সন্ধান করতে শুরু করে যা আপনার অনুরোধের জন্য আকারের সাথে খাপ খায়। মনে করুন যে এই জাতীয় মেমরির একটি ব্লক পাওয়া গেছে, এটি সংরক্ষিত হিসাবে চিহ্নিত করা হয়েছে এবং সেই অবস্থানের একটি পয়েন্টার ফিরে দেওয়া হয়েছে। এটি সম্পাদন করার জন্য বেশ কয়েকটি অ্যালগরিদম রয়েছে কারণ আপনার অবজেক্টের আকারের চেয়ে সবচেয়ে ছোট ফ্রি ব্লক সন্ধানের জন্য পুরো মেমরিটি স্ক্যান করার মধ্যে বা স্মৃতিটি যে যেখানে ফিট রয়েছে সেখানে প্রথমটি ফিরে আসার মধ্যে একটি আপস করতে হবে। মেমরির একটি ব্লক পাওয়ার গতি উন্নত করার জন্য, মেমরির মুক্ত এবং সংরক্ষিত অঞ্চলগুলি বাইনারি গাছের অনুরূপ ডেটা কাঠামোয় একটি হিপ বলা হয়।
কথোপকথন পদাবলী স্ট্যাক মেমরি এবং হিপ মেমরি সি ++ স্ট্যান্ডার্ড ব্যবহার করা হয় না। স্ট্যান্ডার্ডটি স্ট্যাটিক স্টোরেজ, থ্রেড স্টোরেজ, স্বয়ংক্রিয় স্টোরেজ এবং গতিশীল স্টোরেজ ব্যবহার করে।
স্ট্যান্ডার্ডের স্টোরেজ ডিউরেকশন বিভাগে আরও পাওয়া যাবে ।
অতএব, ভাষা এবং স্ট্যান্ডার্ড লাইব্রেরি দৃষ্টিকোণ থেকে, কোনও বিভ্রান্তি নেই।
প্র: গাদা কী? উ: একটি হিপ একে অপরের উপরে স্থাপন করা সামগ্রীর সংগ্রহ।
আপনার প্রশ্নের উত্তর: মেমরি হিপ এবং বাইনারি হ্যাপ উভয়ই আপনার ধারণা হিসাবে একই ধারণাটি ব্যবহার করে। প্রোগ্রামে লিখিতভাবে একই ক্রমে ডেটা মেমরির একটি হিপ আকারে সংরক্ষণ করা হয় যখন বাইনারি হিপ এমন একটি ডেটা স্ট্রাকচার যা হ্যাপের আকারে অর্ডারযুক্ত উপায়ে ডেটা সংরক্ষণ করার একই ধারণা অনুসরণ করে (উপরের ডেটা অন্যান্য) আপনার মন্তব্য বিভাগে আপনি কী মনে করেন তা আমাকে জানান।
সম্ভবত প্রয়োগ করা প্রথম মেমরি হিপ একটি গাদা কাঠামো দ্বারা পরিচালিত হয়েছিল?