প্রোগ্রামটি ফুটে উঠলে কি ফাঁস হওয়া মেমরিটি মুক্ত হয়?


117

যদি আমি প্রোগ্রাম করি - না জেনে - একটি মেমরি ফাঁস, এবং অ্যাপ্লিকেশনটি শেষ হয়ে যায়, তাহলে কী ফাঁস হওয়া মেমরিটি মুক্তি পাবে?


খুব খুব দরকারী, সম্পর্কিত উত্তর: unix.stackexchange.com
গ্যাব্রিয়েল স্ট্যাপলস

উত্তর:


151

হ্যাঁ, একটি "মেমরি ফুটো" হ'ল মেমরি যা কোনও প্রক্রিয়াটির সাথে আর উল্লেখ করা হয় না এবং এভাবে আর মুক্ত হয় না। ওএস এখনও কোনও প্রক্রিয়াতে বরাদ্দকৃত সমস্ত মেমরির খোঁজ রাখে এবং প্রক্রিয়াটি শেষ হয়ে গেলে এটিকে মুক্ত করে দেয়।

উইন্ডোজ, লিনাক্স, সোলারিস ইত্যাদির সাধারণ "স্বাদ" এর ক্ষেত্রে যেমন ওএস স্মৃতি মুক্ত করে দেয়, তেমনি বিভিন্ন রিয়েল-টাইম অপারেটিং সিস্টেমগুলির মতো বিশেষায়িত পরিবেশে প্রোগ্রামটি বন্ধ হয়ে গেলে স্মৃতি মুক্ত করা যায় না।


4
প্রশ্ন: ওএস কি সব বরাদ্দের খোঁজ রাখে? আপনার বরাদ্দ হওয়া কোনও হিপ মেমরিটি প্রক্রিয়াটির ভার্চুয়াল মেমরি স্পেস থেকে আসে - প্রক্রিয়াটি শেষ হয়ে গেলে, সেই স্থানটি সিস্টেমটিকে হোলসেল ফিরে দেওয়া হয়, তাই না? অতিরিক্ত বুককিপিংয়ের প্রয়োজনীয়তা কেন হবে তা আমি দেখছি না, যেহেতু বরাদ্দ দেওয়ার প্রক্রিয়াটি সেই পৃষ্ঠাগুলিতে অ্যাক্সেস সহ একমাত্র প্রক্রিয়া (ইউজারল্যান্ডে)। নাকি আমাকে ভুল শিক্ষা দেওয়া হয়েছে?
ক্রিস টংকিনসন

6
@ জাস্টিন: ওএস না জেনে আমি এটিকে বৈধ বলে মনে করি না। সম্ভবত আপনি যে ওএসটির কথা বলছেন তা স্পষ্টভাবে উল্লেখ করুন।
ব্রায়ান আর বন্ডি

1
দ্রষ্টব্য: মানক এ সম্পর্কে কিছু বলে না। এটিও গ্যারান্টিযুক্ত নয়। আধুনিক ওএসগুলি না হলেও, এটি বেশিরভাগ ক্ষেত্রেই একইভাবে কাজ করে তবে তাদের দরকার নেই এবং অতীতে এমন দুটি ছিল যা উভয়ই সাধারণ ছিল এবং এই ক্লিনআপটি করেনি।
এডওয়ার্ড স্ট্রেঞ্জ

5
ছোট ডিভাইসগুলির জন্য বিভিন্ন রিয়েল-টাইম ওএস রয়েছে এবং এর ফলে লিকগুলি হারিয়ে যাওয়া স্মৃতি পুনরায় দাবি করে না। আপনার প্রশ্ন ওএসের উপর নির্ভর করে যা আপনি কথা বলছেন।
ব্রায়ান নিল

14
এমনকি নির্দিষ্ট মেমোরি সুরক্ষিত অপারেটিং সিস্টেম সহ, আপনাকে এখনও "লিক" সংজ্ঞায়িত করতে হবে। অ্যাপ্লিকেশনগুলিকে তাদের নিজস্ব মেমরির জায়গার বাইরে "সিস্টেম" সংস্থানগুলি বরাদ্দ করা খুব সম্ভব (হ্যান্ডলগুলি প্রায়শই উইন্ডোজ বিশ্বে এটি সনাক্ত করতে ব্যবহৃত হয়)। আপনার অ্যাপ্লিকেশনটি বন্ধ করা সর্বদা নিশ্চিত করে না যে এই ধরণের সংস্থানগুলি প্রকাশিত হয়।
ডেভিড

34

আপনার প্রোগ্রামটি সম্পাদনকারী ওএস সাধারণত ক্লিনআপ মেমরি করে যা স্পষ্টভাবে মুক্ত হয় না এবং হ্যান্ডলগুলি যা স্পষ্টভাবে বন্ধ হয় না, তবে এটি সি ++ স্ট্যান্ডার্ড দ্বারা গ্যারান্টিযুক্ত নয়। আপনি এমন কিছু এম্বেড থাকা ডিভাইস পেতে পারেন যা আপনার মেমোরি ফাঁস মুক্ত করে না।

এটি উইন্ডোজ এবং লিনাক্সের সমস্ত ডিস্ট্রো যা আমি কখনও দেখেছি তা মেমরি ফাঁস মুক্ত করে দেয় said

এটি নিজে পরীক্ষা করার জন্য আপনি মেমরি ফাঁসের একটি বিশাল লুপটি সহজেই তৈরি করতে পারেন। আপনার র‍্যামের ব্যবহার বাড়তে দেখুন এবং তারপরে আপনার প্রোগ্রামটি বন্ধ করুন। আপনি দেখতে পাবেন যে র‌্যামের ব্যবহার পিছিয়ে গেছে।


সি ++ ব্যবহার করার সময় আর একটি বিবেচনা হ'ল আপনি যদি নিজের গাদা বরাদ্দ মেমরিটি মুছে না ফেলেন তবে আপনার ধ্বংসকারীদেরও ডাকা হবে না। কখনও কখনও আপনার অন্যান্য পার্শ্ব প্রতিক্রিয়াগুলিও ঘটতে পারে যদি আপনার ধ্বংসকারীদের ডাকা না হয়।


14

আপনি কি ডেস্কটপ ওএসে চালাচ্ছেন (উইন্ডোজ, লিনাক্স ইত্যাদি)? যদি তা হয় তবে হ্যাঁ, সাধারণভাবে প্রোগ্রামটি প্রস্থান করার সময় সিস্টেমটি প্রোগ্রামের সাথে সম্পর্কিত কোনও স্মৃতি মুক্ত করে দেবে।


10

সাধারণত, হ্যাঁ কিছু সিস্টেম ভাগ করা মেমরি ব্লকগুলির মতো জিনিসগুলিকে সমর্থন করে যা কোনও প্রোগ্রামের বাইরে চলে গেলে স্বয়ংক্রিয়ভাবে মুক্ত হয় না। বেশিরভাগ এখনও একটি রেফারেন্স গণনা রাখে এবং এটিকে মুছে ফেলা হলে সমস্ত প্রোগ্রাম এটিকে মুছুন তবে কিছু না (যেমন, 16-বিট উইন্ডোতে কয়েকটি ধরণের আইটেম ছিল যা কিছু উল্লেখ না করেও বরাদ্দ থাকবে - যদিও এটি সাধারণত সমস্যার জন্য যথেষ্ট পরিমাণে জমে থাকা আগে অন্যান্য কারণে ক্রাশ হয়ে যায় ...)


5

যতদূর আমি জানি, একটি আধুনিক অপারেটিং সিস্টেম প্রোগ্রামটি শেষ হয়ে গেলে এই মেমরিটি মুক্ত করবে।


4

আপনি কী স্মৃতি ফাঁস করেছেন তার উপর নির্ভর করে। কিছু স্মৃতি ওএস দ্বারা পুনরুদ্ধার করা যায় না। প্রক্রিয়াটি প্রস্থান করার পরে বেশিরভাগ ওএসে সর্বাধিক মেমরি স্বয়ংক্রিয়ভাবে পুনরায় দাবি করা হবে।


6
কিছু স্মৃতি OS দ্বারা পুনরুদ্ধার করা যায় না - যেমন কী?

2
কিছু রিয়েল-টাইম ওএস-এর ক্ষেত্রে, আমি বিশেষ ইথারনেট বাফার ব্লকগুলি দেখেছি যা কোনও প্রক্রিয়াটি বের হয়ে গেলে পরিষ্কার হয় না।
ব্রায়ান নিল

1
ভাগ করা মেমরিটিও সাধারণত পুনরুদ্ধার করা হয় না, কারণ আপনি ক্ষণস্থায়ী প্রক্রিয়াগুলি ব্যবহারের জন্য এটি চালিয়ে যেতে চাইতে পারেন।
ব্রায়ান নিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.