সি প্রোগ্রামিং এ মেমরি লিক কি?

Si Programim E Memari Lika Ki



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

একটি মেমরি লিক কখন ঘটে?

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

সি-তে মেমরি লিকের প্রভাব

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







C ভাষায় মেমরি বরাদ্দ

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



মেমরি লিক এর কারণ

এর কিছু কারণ মেমরি লিক হয়:



1: অনুপযুক্ত মেমরি ব্যবস্থাপনা

মেমরি ফাঁসের সবচেয়ে ঘন ঘন কারণ হল প্রোগ্রামারের দুর্বল মেমরি ব্যবস্থাপনা। এটি ঘটে যখন একটি প্রোগ্রাম মেমরি প্রকাশ করতে অবহেলা করে যা আর প্রয়োজন হয় না।





#include
#include

int প্রধান ( )
{
int * ptr = ( int * ) malloc ( আকার ( int ) ) ;
* ptr = 10 ;
printf ( '%d \n ' , * ptr ) ;
ptr = খালি ;
ফিরে 0 ;
}

উপরের কোডে, ব্যবহার করে malloc() মধ্যে পদ্ধতি ptr পয়েন্টার, আমরা একটি পূর্ণসংখ্যা মেমরি ব্লকের জন্য স্থান বরাদ্দ করেছি। দ্য ptr যখন আমরা সেট করি তখন পয়েন্টারের মান পরিবর্তন হয় খালি এটিতে, তবুও এটি পূর্বে উল্লেখ করা মেমরি ব্লকটি প্রকাশ করা হয়নি। অতএব, ক মেমরি লিক ফলাফল হবে

আউটপুট



2: আউট অফ স্কোপ পয়েন্টার

যখন একটি পয়েন্টার ভেরিয়েবল এর স্কোপ বিদ্যমান থাকে, a মেমরি লিক সি প্রোগ্রামে ঘটে।

#include
#include

int প্রধান ( )
{
int সংখ্যা1 = 32 , সংখ্যা2 = 23 ;
{
int * যোগফল = ( int * ) malloc ( আকার ( int ) ) ;
* যোগফল = সংখ্যা1 + সংখ্যা2 ;
printf ( '%d \n ' , * যোগফল ) ;
}
printf ( '%d \n ' , * যোগফল ) ;
ফিরে 0 ;
}

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

আউটপুট

সি-তে মেমরি লিকস সনাক্তকরণ

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

সি-তে মেমরি লিক প্রতিরোধ করা

প্রতিরোধ করতে মেমরি লিক , নীচের প্রদত্ত নির্দেশাবলী অনুসরণ করুন.

1: সর্বদা বরাদ্দ করা মেমরি প্রকাশ করুন
মেমরি সবসময় ব্যবহার করে স্পষ্টভাবে প্রকাশ করা উচিত বিনামূল্যে() একটি ফাংশন ব্যবহার করে গতিশীলভাবে বরাদ্দ করার পরে পদ্ধতি malloc(), calloc(), বা realloc() . এটি করার মাধ্যমে, এটি নিশ্চিত করা হয় যে মেমরিটি সিস্টেমে ফিরে এসেছে এবং অন্যান্য ব্যবহারের জন্য উপলব্ধ।

2: নিরীক্ষণ বরাদ্দ মেমরি
বরাদ্দ করা মেমরি নিরীক্ষণ করা গুরুত্বপূর্ণ যাতে এটি রিলিজ হয় তা নিশ্চিত করার জন্য যখন এটি আর প্রয়োজন হয় না। এটি বরাদ্দ করা প্রতিটি মেমরির ট্র্যাক রেখে এবং যখন এটির আর প্রয়োজন নেই তখন এটি প্রকাশ করে অর্জন করা যেতে পারে।

3: পয়েন্টার ট্র্যাক রাখুন
পয়েন্টারগুলিকে স্বয়ংক্রিয়ভাবে মেমরি বরাদ্দকরণ এবং ডিলোকেশন পরিচালনা করতে ট্র্যাক করা উচিত, মেমরি লিক প্রতিরোধ করা উচিত।

4: স্ট্যাটিক অ্যানালাইসিস টুলস ব্যবহার করুন
নির্মাণের সময়, স্ট্যাটিক বিশ্লেষণ সরঞ্জামগুলি সম্ভাব্য সনাক্ত করতে পারে মেমরি লিক C প্রোগ্রামে, যেমন Clang এবং GCC. অ্যাপ্লিকেশনটি চালানোর আগে, এই সরঞ্জামগুলি সম্ভাব্য মেমরি ফাঁস সনাক্ত করতে এবং সংশোধনের পরামর্শ দিতে সহায়তা করতে পারে।

নিম্নলিখিত উদাহরণটি উপরের প্রক্রিয়াটি ব্যাখ্যা করে।

#include
# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত করুন

int প্রধান ( )
{
int * ptr = ( int * ) malloc ( আকার ( int ) ) ;
যদি ( ptr == খালি ) {
printf ( 'মেমরি বরাদ্দ ত্রুটি। \n ' ) ;
ফিরে 1 ;
}
* ptr = 10 ;
printf ( '%d \n ' , * ptr ) ;
বিনামূল্যে ( ptr ) ;
ফিরে 0 ;
}

এই উপরের কোডটি প্রথমে মেমরি বরাদ্দ সফল হয়েছে কিনা তা পরীক্ষা করে নির্ধারণ করে ptr রেফারেন্স নয় খালি . বরাদ্দ ব্যর্থ হলে কোডটি সঠিকভাবে ত্রুটিটি পরিচালনা করতে পারে। যদি বরাদ্দ সফল হয়, কোড মেমরি ব্লক একটি মান দেয় 10 এবং এটি আউটপুট. এর পরে, কোডটি মেমরিটি প্রকাশ করে যা ব্যবহার করে বরাদ্দ করা হয়েছিল বিনামূল্যে() ফাংশন

আউটপুট

উপসংহার

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