মেমরি ফাঁস কতদূর যেতে পারে?


118

আমি অনেকবার স্মৃতি ফুটো হয়ে গেছি। সাধারণত যখন আমি থাকি mallocযেমন আগামীকাল নেই, বা FILE *নোংরা লন্ড্রির মতো ঝোলাচ্ছে । আমি সাধারণত ধরে নিই (পড়া: মরিয়া আশা করি) যে প্রোগ্রামটি শেষ হয়ে গেলে কমপক্ষে সমস্ত মেমরি পরিষ্কার হয়ে যায়। এমন কোনও পরিস্থিতি রয়েছে যেখানে প্রোগ্রাম শেষ হয়ে গেলে বা ক্রাশ হয়ে গেলে ফাঁস মেমরি সংগ্রহ করা হবে না?

যদি উত্তরটি ভাষা-ভাষা থেকে আলাদাভাবে পরিবর্তিত হয় তবে আসুন আমরা সি (++) এর দিকে মনোনিবেশ করব।

অনুগ্রহ করে 'কালকের মতো নেই', এবং 'জঞ্জাল ... নোংরা লন্ড্রি'র মতো শব্দটির হাইপারবোলিক ব্যবহার লক্ষ্য করুন। আপনার পছন্দসই mallocব্যক্তিকে ক্ষতি করতে পারে অনিরাপদ * * আইং। এছাড়াও, দয়া করে নোংরা লন্ড্রি সহ সতর্কতা ব্যবহার করুন।


3
যদি আপনি লিনাক্স বা উইন্ডোজের মতো কোনও "আধুনিক" ওএস নিয়ে চলেছেন, তবে প্রোগ্রামটি শেষ হয়ে গেলে ওএস নিজেই কোনও অপ্রকাশিত মেমরি সমাধান করবে।
অলিভার চার্লসওয়ার্থ

60
কাল নেই বলে ম্যালোক-ইনগিংয়ের পরিবর্তে, আগামীকাল আছে বলে ভান করার চেষ্টা করুন এবং আপনার স্মৃতিতে নজর রাখুন!
উইলিয়াম পার্সেল

8
@ উইলিয়ামাম পার্সেল আহ, সুতরাং আপনি বলছেন যে একজনকে callocপছন্দ করা উচিত যে আগামীকাল নেই। চমৎকার।
ডিলিথিয়ামম্যাট্রিক্স

8
"যদি উত্তরটি ভাষা-ভাষা থেকে আলাদাভাবে পরিবর্তিত হয়, তবে সি (++) এ ফোকাস করতে দিন" " সি এবং সি ++ একই ভাষা নয়!
জনসিওয়েব

11
@ জারমেস: সি এবং সি ++ এর বিভিন্ন ভাষাগুলি সম্পর্কে মন্তব্য আপনার ভাবার চেয়ে বেশি আড়াল হয়েছে ... সি ++ এ আপনি বরং স্বয়ংক্রিয় স্টোরেজ সময়কালের সাথে নিজেকে অবজেক্টগুলির সুবিধা গ্রহণ করতে দেখবেন, আরআইআই আইডিয়ম অনুসরণ করুন ... আপনি এই বিষয়গুলিকে স্মৃতির যত্ন নিতে দেবেন আপনার জন্য পরিচালনা।
LihO

উত্তর:


111

না। অপারেটিং সিস্টেমগুলি প্রস্থান করার সময় প্রক্রিয়া দ্বারা আটক সমস্ত সংস্থান মুক্ত করে।

অপারেটিং সিস্টেমটি বজায় রাখে এমন সমস্ত সংস্থানগুলিতে এটি প্রযোজ্য: মেমরি, ফাইল খুলুন, নেটওয়ার্ক সংযোগ করুন, উইন্ডো হ্যান্ডলগুলি ...

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

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


5
আরটিওএসগুলিতে একটি সাধারণ দৃষ্টান্ত হ'ল একক প্রক্রিয়া, একাধিক থ্রেড মডেল এবং 'কার্য' এর মধ্যে কোনও স্মৃতি সুরক্ষা নয়। সাধারণত একটি স্তূপ থাকে। এটি অবশ্যই VxWorks কীভাবে কাজ করত - এবং সম্ভবত এখনও তা করে।
মার্কো

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

1
@ মার্কো: ভিএক্স ওয়ার্কসের সাম্প্রতিক সংস্করণটি এখন আরটিপিগুলিকে সমর্থন করে (রিয়েল টাইম প্রসেস) যা মেমরির সুরক্ষা সমর্থন করে।
জাভিয়ার টি।

20
"অপারেটিং সিস্টেমগুলি প্রস্থান করার সময় প্রক্রিয়া দ্বারা আটক সমস্ত সংস্থান মুক্ত করে" " কঠোরভাবে সত্য নয়। উদাহরণস্বরূপ, (কমপক্ষে) লিনাক্সে, সিএসভি সেম্যাফোরাস এবং অন্যান্য আইপিসি অবজেক্টগুলি প্রক্রিয়া প্রস্থান করার সময় পরিষ্কার হয় না। এই কারণেই ipcrmম্যানুয়াল ক্লিনআপ, লিনাক্স.ডিয়ে নেট / ম্যান / ৮ / আইপিসিআরএম রয়েছে
স্লেসকে

7
এছাড়াও, যদি কোনও বস্তুর একটি অস্থায়ী ফাইল থাকে যা এটি বজায় রাখে তবে স্পষ্টভাবে পরে এটি পরিষ্কার হয়ে যাবে না।
মাকিং হাঁস

47

mallocপ্রোগ্রামটি শেষ হলে সি স্ট্যান্ডার্ড দ্বারা বরাদ্দ করা মেমরিটি নির্দিষ্ট করা হয় না । এটি অপারেটিং সিস্টেম দ্বারা সম্পন্ন হয় এবং সমস্ত ওএস নয় (সাধারণত এগুলি এমবেডড ওয়ার্ল্ডে থাকে) প্রোগ্রামটি শেষ হয়ে গেলে মেমরি ছেড়ে দেয়।


20
এটি কম-বেশি কারণ সি স্ট্যান্ডার্ড সি প্রোগ্রামগুলির বিষয়ে কথা বলে, অপারেটিং সিস্টেমগুলি নয় যার উপর সি চালানোর ঘটনা ঘটে ...
ভোনব্র্যান্ড

5
@ ভনব্র্যান্ড সি স্ট্যান্ডার্ডের এমন একটি অনুচ্ছেদ থাকতে পারে যেটিতে বলা আছে যে mainসমস্ত বরাদ্দকৃত স্মৃতি মেটানো হলে ফিরে আসে malloc। উদাহরণস্বরূপ এটি বলে যে সমস্ত খোলার ফাইলগুলি প্রোগ্রাম সমাপ্তির আগে বন্ধ হয়ে যায়। বরাদ্দ করা মেমরির জন্য malloc, এটি নির্দিষ্ট করা হয়নি। এখন অবশ্যই ওএস সম্পর্কিত আমার বাক্যটি সাধারণত যা করা হয় তা বর্ণনা করে যা স্ট্যান্ডার্ড নির্ধারণ করে না, কারণ এটি এতে কোনও নির্দিষ্ট করে না।
ওহাহ

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

2
@ouah: " যখন প্রধান ফিরে আসে ..."। এটা একটা অনুমান। আমাদের " যদি মূল রিটার্ন ..." বিবেচনা করতে হয় । std::atexitএছাড়াও প্রোগ্রামের সমাপ্তি বিবেচনা করে std::exitএবং তারপরেও রয়েছে std::abortএবং (সি ++ নির্দিষ্ট) std::terminate
এমসাল্টার্স 12 '17

@ লৌ: যদি এটি অন্তর্ভুক্ত করা atexitহত তবে ব্যবহারযোগ্য হবে না। :-)
আর .. গীটহাব বন্ধ করুন ICE

28

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

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

সুতরাং আপনি এটিকে ওএসগুলি ছাড়াও মেমরিটিকে পুনরায় দাবি না করা ছাড়া অন্য একটি মামলা হিসাবে বিবেচনা করতে পারেন কারণ এটি বগি বা এমবেডড ওএস এটি করার জন্য ডিজাইন করা হয়েছে।

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


এটি সত্যিই আকর্ষণীয়, historicalতিহাসিক নোটের জন্য ধন্যবাদ! আপনি কি জানেন যে দৃষ্টান্তটি প্রয়োজন না পড়লে মেমরিটি খুব কম কম্পিউটেশনাল ব্যয়বহুল হওয়ার কারণে হয়? অথবা বিকল্পটির কথা কি এখনও ভাবা হয়নি?
ডিলিথিয়ামম্যাট্রিক্স

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

2
@ জারমেস: ডস (সিপি / এম এর মতো, এর পূর্বপুরুষ) আপনি আধুনিক অর্থে অপারেটিং সিস্টেমটিকে কল করবেন না। এটি সত্যই I / O ইউটিলিটিগুলির একটি সংগ্রহ যা একটি কমান্ড প্রসেসরের সাথে বান্ডিল করা একটি স্ট্যান্ডার্ড উপায়ে কল করা যেতে পারে যা আপনাকে একবারে একটি প্রোগ্রাম চালাতে দেয়। প্রক্রিয়াগুলির কোনও ধারণা ছিল না, এবং মেমরিটি ভার্চুয়াল বা সুরক্ষিত ছিল না। টিএসআরগুলি একটি দরকারী হ্যাক ছিল যা তারা যে সিস্টেমটি বলতে পারে যে তারা 64K অবধি জায়গা নিচ্ছে এবং তাদেরকে বাধা দিতে পারে তাই তাদের ডাকা হবে।
ব্লারফ্লার

8

অন্যরা যেমন বলেছে, বেশিরভাগ অপারেটিং সিস্টেমগুলি প্রক্রিয়া সমাপ্তির পরে বরাদ্দকৃত মেমরির পুনরায় দাবি জানাবে (এবং সম্ভবত অন্যান্য সংস্থান যেমন নেটওয়ার্ক সকেট, ফাইল হ্যান্ডেল ইত্যাদি)।

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

গল্পটির নৈতিকতা, সর্বদা নিজের পরে পরিষ্কার করুন। জিনিসগুলিকে ঝুঁকতে দেবেন না। আপনার পরে ওএস পরিষ্কার করার উপর নির্ভর করবেন না। নিজের পরে পরিষ্কার করুন।


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

1
সি ++ তে, ডেস্ট্রাক্টররা প্রোগ্রামটি সমাপ্ত করার জন্য আহ্বান জানাবে (যদি না কম-উজ্জ্বল kill -9ফ্যান না দেখায় ...)
ভোনব্র্যান্ড

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

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

@ ভনব্র্যান্ড: এটি এত সহজ নয়। std::exitডাক্তার কল std::abortকরবে, না, ব্যাতীত ব্যতিক্রম হতে পারে।
এমসাল্টার্স

7

এটি ভাষার চেয়ে অপারেটিং সিস্টেমের উপর নির্ভর করে বেশি। চূড়ান্তভাবে যে কোনও প্রোগ্রামের যে কোনও প্রোগ্রাম অপারেটিং সিস্টেম থেকে এটির স্মৃতি পেয়ে যাবে।

আমি কখনই এমন কোনও অপারেটিং সিস্টেমের কথা শুনিনি যা কোনও প্রোগ্রাম প্রস্থান / ক্র্যাশ হয়ে গেলে মেমরিটিকে পুনর্ব্যক্ত করে না। সুতরাং যদি আপনার প্রোগ্রামটির মেমরির উপরে বরাদ্দ হওয়া দরকার তার উপরের আবদ্ধ থাকে, তবে কেবল বরাদ্দ দেওয়া এবং কখনই নিখরচায় রাখা পুরোপুরি যুক্তিসঙ্গত।


সিম্পলাস্টিক ওএসের ক্ষেত্রে আপনি কার্নেলের স্মৃতি চিত্র আঁকতে পারবেন? .. যেমন মাল্টিটাস্কিং ছাড়াই অপারেটিং সিস্টেমগুলি।
ulidtko

@ জুলিদকো, এটি জিনিসগুলি স্ক্রু করবে । যদি আমার প্রোগ্রামটির জন্য একবার 1 জিআইবি প্রয়োজন হয় এবং সময়কালের জন্য ধরে ফেলে তবে এটি অন্যদের কাছে এই সংস্থানগুলি ব্যবহার না করার পরেও অস্বীকার করছে। আজকের দিনটি এটি গুরুত্বপূর্ণ হতে পারে বা নাও পারে। তবে পরিবেশের আমূল পরিবর্তন হবে । নিশ্চিত।
ভোনব্র্যান্ড

@ ভনব্র্যান্ড 1 জিআইবির বিরল ব্যবহার সাধারণত কোনও সমস্যা নয় (যতক্ষণ না আপনি প্রচুর শারীরিক স্মৃতি পেয়েছেন) আধুনিক অপারেটিং সিস্টেমগুলি বর্তমানে সক্রিয় নয় এমন বিটগুলি খুঁজে বের করতে পারে। সমস্যাটি তখনই আসে যখন আপনি শারীরিক মেমরিটি হোস্ট করার চেয়ে সক্রিয় ব্যবহারে আরও ভার্চুয়াল মেমরি পেয়েছেন।
ডোনাল ফেলো

5

প্রোগ্রামটি যদি কোনও গতিশীল উপাদান ("প্লাগইন") হিসাবে রূপান্তরিত হয় যা অন্য প্রোগ্রামের ঠিকানার জায়গায় লোড করা হয়, তবে এটি পরিশ্রমী হবে, এমনকি পরিপাটি মেমরি পরিচালনা সহ অপারেটিং সিস্টেমেও। এমনকি কোডটি কম সক্ষম সিস্টেমে পোর্ট করা হচ্ছে এমনটিও আমাদের ভাবার দরকার নেই।

অন্যদিকে, সমস্ত স্মৃতি মুক্ত করতে পারে কোনও প্রোগ্রামের ক্লিনআপের কার্যকারিতাকে প্রভাবিত ।

আমি যে একটি প্রোগ্রামে কাজ করছি, একটি নির্দিষ্ট পরীক্ষার ক্ষেত্রে 30 সেকেন্ড বা তার বেশি সময় প্রয়োজন প্রোগ্রামটি থেকে বেরিয়ে আসার জন্য, কারণ এটি সমস্ত গতিশীল মেমরির গ্রাফের মাধ্যমে পুনরাবৃত্তি করছিল এবং এটি টুকরো টুকরো করে ছাড়ছিল।

একটি যুক্তিসঙ্গত সমাধান হ'ল সেখানে সক্ষমতা রয়েছে এবং এটি পরীক্ষার কেসগুলি দিয়ে আচ্ছাদিত করা উচিত তবে এটিকে উত্পাদন কোডে বন্ধ করে দিন যাতে অ্যাপ্লিকেশনটি দ্রুত প্রস্থান করে।


5

শিরোনামের প্রাপ্য সমস্ত অপারেটিং সিস্টেমগুলি আপনার প্রক্রিয়াটি সমাপ্তির পরে তৈরি বিশৃঙ্খলা পরিষ্কার করবে। তবে সবসময় অপ্রত্যাশিত ইভেন্টগুলি থাকে, যদি এটি কোনওভাবে অ্যাক্সেস থেকে বঞ্চিত হয় এবং কিছু দুর্বল প্রোগ্রামার সম্ভাবনার পূর্বাভাস না রাখে এবং তাই এটি পরে আবার চেষ্টা না করে তবে কী হবে? নিজেকে পরিষ্কার করার জন্য সর্বদা নিরাপদ যদি মেমরি ফাঁস মিশন সমালোচনামূলক - অন্যথায় যদি প্রচেষ্টা ব্যয় হয় তবে সত্যই প্রচেষ্টা আইএমওর পক্ষে মূল্য নয়।

সম্পাদনা করুন: মেমরি ফাঁসগুলি যেখানে লুপের মতো জমে সেখানে তারা জমা হয় এমন জায়গায় থাকলে আপনার পরিষ্কার করা দরকার। আমি যে মেমরি ফুটোটির কথা বলি তা হ'ল যা প্রোগ্রামের পুরো চলাকালীন ধ্রুবক সময়ে গড়ে তোলে, আপনার যদি অন্য কোনও ধরণের ফাঁস থাকে তবে তাড়াতাড়ি বা পরে সম্ভবত এটি একটি গুরুতর সমস্যা হতে পারে।

প্রযুক্তিগত ক্ষেত্রে যদি আপনার ফাঁস মেমরির জটিলতায় থাকে 'O (1) বেশিরভাগ ক্ষেত্রে এগুলি ঠিক থাকে, ও (লগন) ইতিমধ্যে অপ্রীতিকর (এবং কিছু ক্ষেত্রে মারাত্মক) এবং ও (এন) + অসহনীয়।


3

POSIX অনুবর্তী সিস্টেমগুলিতে ভাগ করা মেমরি shm_unlink না বলা বা সিস্টেমটি পুনরায় বুট না করা অবধি স্থায়ী থাকে।


2

যদি আপনার আন্তঃসম্পর্কিত যোগাযোগ থাকে, তবে এটি অন্যান্য প্রক্রিয়াগুলি প্রোটোকলের উপর নির্ভর করে সংস্থানগুলি সম্পূর্ণ না করে এবং গ্রাস করতে পারে।

উদাহরণস্বরূপ, আমি একবার জাভাতে পিডিএফ প্রিন্টারে মুদ্রণের জন্য পরীক্ষা করছিলাম যখন আমি প্রিন্টারের কাজের মাঝামাঝি সময়ে জেভিএমকে সমাপ্ত করেছিলাম, পিডিএফ স্পুলিং প্রক্রিয়া সক্রিয় ছিল, এবং আমি টাস্ক ম্যানেজারের আগে এটি শেষ করে ফেলতে হয়েছিল পুনরায় মুদ্রণ চেষ্টা করুন।

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