সঙ্গে ডায়নামিক বরাদ্দ new/delete
উপর সঞ্চালিত বললেন ফ্রি-দোকান ,
যখন malloc/free
অপারেশন ব্যবহার গাদা ।
বাস্তবে সত্যিকারের পার্থক্য আছে কিনা তা জানতে চাই।
সংকলকগণ কি দুটি পদের মধ্যে পার্থক্য তৈরি করে? ( ফ্রি স্টোর এবং হিপ , নেই new/malloc
)
সঙ্গে ডায়নামিক বরাদ্দ new/delete
উপর সঞ্চালিত বললেন ফ্রি-দোকান ,
যখন malloc/free
অপারেশন ব্যবহার গাদা ।
বাস্তবে সত্যিকারের পার্থক্য আছে কিনা তা জানতে চাই।
সংকলকগণ কি দুটি পদের মধ্যে পার্থক্য তৈরি করে? ( ফ্রি স্টোর এবং হিপ , নেই new/malloc
)
উত্তর:
Http://www.gotw.ca/gotw/009.htm দেখুন ; এটি গাদা এবং ফ্রি-স্টোরের মধ্যে পার্থক্যগুলি আমার চেয়ে অনেক বেশি ভালভাবে বর্ণনা করতে পারে:
ফ্রি-দোকান:
ফ্রি স্টোর দুটি গতিশীল মেমরির ক্ষেত্রগুলির মধ্যে একটি, নতুন / মোছার দ্বারা বরাদ্দ / মুক্ত। স্টোরেজ বরাদ্দ করা সময়ের চেয়ে অবজেক্টের আজীবন কম হতে পারে; অর্থাত, ফ্রি স্টোর অবজেক্টগুলিকে তাত্ক্ষণিকভাবে আরম্ভ না করে মেমরি বরাদ্দ থাকতে পারে এবং মেমরিটি অবিলম্বে ক্ষয় না হয়ে ধ্বংস করা যেতে পারে। স্টোরেজ বরাদ্দ করা হলেও অবজেক্টের জীবদ্দশার বাইরে, কোনও অকার্যকর * মাধ্যমে স্টোরেজ অ্যাক্সেস করতে এবং হেরফের করা যেতে পারে তবে প্রোটো-অবজেক্টের ননস্ট্যাটিক সদস্য বা সদস্য ফাংশনগুলির কোনওটিই অ্যাক্সেস করতে পারে না, তাদের ঠিকানাগুলি গ্রহণ করতে পারে, বা অন্যথায় কারসাজি করা যায় না ।
গাদা:
হিপ হ'ল অন্যান্য গতিশীল মেমরি অঞ্চল, বরাদ্দ / ম্যালাক / ফ্রি এবং তাদের রূপগুলি দ্বারা মুক্ত করা হয়। মনে রাখবেন যে ডিফল্ট গ্লোবাল নতুন এবং মুছে ফেলা কোনও নির্দিষ্ট সংকলক দ্বারা ম্যালোকের ক্ষেত্রে এবং বিনামূল্যে প্রয়োগ করা যেতে পারে, তবে হিপটি একই জায়গায় নিখরচায় স্টোর এবং মেমরির ক্ষেত্রে অন্যভাবে নিরাপদে অপসারণ করা যায় না। গাদা থেকে বরাদ্দ হওয়া মেমরি ক্লাস ধরণের অবজেক্টগুলির জন্য বসানো-নতুন নির্মাণ এবং সুস্পষ্ট ধ্বংস দ্বারা ব্যবহার করা যেতে পারে। যদি এটি ব্যবহার করা হয় তবে ফ্রি স্টোর অবজেক্টের আজীবন নোটগুলি এখানে একইভাবে প্রয়োগ হয়।
সি ++ এর জন্য, ফ্রি স্টোর এবং হিপগুলির মধ্যে পার্থক্য নিখুঁতভাবে ধারণাগত হয়ে উঠেছে। বাগ সংগ্রহের জন্য জারের মতো এবং কুকি সংগ্রহের জন্য একটি। একটির এক উপায়ে লেবেলযুক্ত, অন্যটি other এই পদচিহ্নটি বোঝায় আপনি যে বিন্দুটি " new
" এবং " delete
" " malloc
" " realloc
" " " "অথবা" free
"(অথবা এই বিষয়টির জন্য বিট স্তর সেটগুলি) মিশ্রিত করেন না home
সাক্ষাত্কারের সময় এটি বলা ভাল যে " new
এবং delete
ফ্রি স্টোরটি ব্যবহার করুন , malloc
এবং free
গাদাটি ব্যবহার করুন; new
এবং delete
যথাক্রমে নির্মাতা এবং ধ্বংসকারীকে কল করুন malloc
এবং free
করবেন না।" তবুও, আপনি প্রায়শই শুনতে পাবেন যে মেমরির বিভাগগুলি একই অঞ্চলে রয়েছে - তবে এটি সংকলক নির্দিষ্ট হতে পারে, অর্থাত্ উভয়ই আলাদা মেমরি স্পেসকে পুল হিসাবে নির্ধারণ করতে পারে (এটি কেন হবে তা নিশ্চিত নয়) যদিও)।
মাইক কোভালের উত্তর তত্ত্বটি বেশ ভালভাবে জুড়েছে। বাস্তবে, তবে এগুলি প্রায় সবসময় মেমরির একই অঞ্চলে থাকে - বেশিরভাগ ক্ষেত্রে আপনি যদি সংকলকটির বাস্তবায়নটি খনন করেন তবে new
আপনি এটি কল পাবেন malloc()
।
অন্য কথায়: মেশিনের দৃষ্টিকোণ থেকে, হিপ এবং ফ্রি স্টোর একই জিনিস। কম্পাইলারের ভিতরে পার্থক্য বিদ্যমান।
জিনিসগুলিকে আরও বিভ্রান্ত করার জন্য, সি ++ এর আবির্ভাবের আগে আমরা "হিপ" বলছিলাম যার অর্থ এখন "ফ্রি স্টোর" called
গাদা এবং ফ্রি-স্টোরটি আন্তঃযোগযোগ্য হওয়ার কথা নয়। সি ++ 11 স্ট্যান্ডার্ড লাইব্রেরি সহ এভিআর 8-বিট মাইক্রো কন্ট্রোলারের মতো সীমাবদ্ধ প্রসঙ্গে, তারা এমনকি একই প্রোগ্রামে ব্যবহার করা যাবে না। ফ্রি স্টোর এবং হিপগুলি তাদের বরাদ্দগুলি একই মেমোরি স্পেসে করে, একে অপরের কাঠামো এবং ডেটা ওভাররাইট করে। এই প্রসঙ্গে, ফ্রি স্টোর হ্যাপের সাথে পৃথক এবং বেমানান কারণ "" নতুন / মুছে ফ্রি স্টোর লাইব্রেরি "" ম্যালোক / ফ্রি / রিলোক / কলোক হ্যাপ লাইব্রেরি "এর চেয়ে সহজ (এবং দ্রুত) এবং এইভাবে বিশাল মেমরির ব্যবহারের লাভ সরবরাহ করে সি ++ এম্বেড প্রোগ্রামার (এমন একটি প্রসঙ্গে যেখানে আপনার র্যামের মাত্র 512 বাইট থাকে)।
8 বিট সি ++ 11/14 স্ট্যান্ডার্ড লাইব্রেরি https://github.com/ambroise-leclerc/ETL/tree/master/libstd এ দেখুন
ফ্রি স্টোর হল এমন একটি প্রোগ্রাম যা বরাদ্দ না দেওয়া হিপ মেমরির একটি প্রোগ্রাম যা প্রোগ্রামের সঞ্চালনের সময় গতিশীল বরাদ্দের জন্য প্রোগ্রাম দ্বারা ব্যবহৃত হয়। প্রতিটি প্রোগ্রামে আন-বরাদ্দ হ্যাপ মেমরির পুল সরবরাহ করা হয় যা এটি কার্যকর করার সময় ব্যবহার করতে পারে। উপলভ্য মেমরির এই পুলটিকে প্রোগ্রামের ফ্রি স্টোর হিসাবে উল্লেখ করা হয়। বরাদ্দ করা ফ্রি স্টোর মেমরিটি নামবিহীন।