سی پروگرامنگ میں میموری لیک کیا ہے؟

Sy Prwgramng My Mymwry Lyk Kya



پروگرامنگ کے بنیادی اصولوں میں میموری کا انتظام شامل ہے، خاص طور پر C جیسی زبانوں میں بغیر ان بلٹ کوڑا اٹھانے والے کے۔ یادداشت کا لیک ہونا ایسی زبانوں میں ایک عام مسئلہ ہے، اور وہ پروگرام کو زیادہ سے زیادہ میموری استعمال کرنے کا سبب بنتے ہیں جب تک کہ پروگرام میموری کی کمی کی وجہ سے کریش نہ ہو جائے۔ جب کوئی سافٹ ویئر میموری کو جاری کرنے میں ناکام ہوجاتا ہے جس کی مزید ضرورت نہیں ہے، تو میموری مختص اور غیر استعمال شدہ ہے، جس کے نتیجے میں یاداشت کا ضیاء .

میموری کا اخراج کب ہوتا ہے؟

جب سافٹ ویئر میموری کو مختص کرتا ہے لیکن اس کے ساتھ گزرنے کے بعد اسے جاری نہیں کرتا ہے، وہاں ایک ہے۔ یاداشت کا ضیاء . اس کا مطلب یہ ہے کہ پروگرام نئے متغیرات کے لیے زیادہ سے زیادہ میموری مختص کرتا رہتا ہے جبکہ پرانی میموری کو مختص اور غیر استعمال شدہ چھوڑ دیتا ہے۔ اس کے نتیجے میں پروگرام زیادہ سے زیادہ میموری استعمال کرتا ہے، اور آخر کار، میموری سے باہر ہونے والی غلطی کی وجہ سے پروگرام کریش ہو جاتا ہے۔

سی میں میموری لیک کے اثرات

یادداشت کا لیک ہونا ایک پروگرام میں بہت سے مسائل پیدا کر سکتے ہیں. اگر بغیر نشان کے چھوڑ دیا جائے، a یاداشت کا ضیاء پروگرام کے کریش ہونے یا چلنا بند کرنے کا سبب بن سکتا ہے، جس سے ڈیٹا ضائع ہو سکتا ہے یا بدعنوانی ہو سکتی ہے۔ مزید برآں، چونکہ پروگرام اپنی ضرورت سے زیادہ میموری استعمال کر رہا ہے، اس لیے یہ سسٹم کی کارکردگی کو متاثر کر سکتا ہے اور اسی سسٹم پر چلنے والے دوسرے پروگراموں کو سست کر سکتا ہے۔







C زبان میں میموری ایلوکیشن

میموری کی تخصیص کا استعمال کرتے ہوئے کی جاتی ہے۔ malloc() C زبان میں فنکشن۔ یہ طریقہ مخصوص سائز کے ساتھ میموری بلاک کا حوالہ دیتا ہے۔ پوائنٹر ویلیو کو مختص میموری بلاک تک رسائی کے لیے استعمال کیا جاتا ہے۔ ایک بار جب میموری کی ضرورت نہ ہو تو اسے استعمال کرکے آزاد کرنے کی ضرورت ہے۔ مفت() فنکشن



میموری لیک ہونے کی وجوہات

کی کچھ وجوہات میموری لیک ہیں:



1: یادداشت کا غلط انتظام

میموری لیک ہونے کی سب سے زیادہ وجہ پروگرامر کی جانب سے میموری کا ناقص انتظام ہے۔ ایسا اس وقت ہوتا ہے جب کوئی پروگرام میموری کو جاری کرنے میں کوتاہی کرتا ہے جس کی مزید ضرورت نہیں ہے۔





# شامل کریں
# شامل کریں

int مرکزی ( )
{
int * ptr = ( int * ) malloc ( کا سائز ( int ) ) ;
* ptr = 10 ;
printf ( '%d \n ' , * ptr ) ;
ptr = خالی ;
واپسی 0 ;
}

مندرجہ بالا کوڈ میں، کا استعمال کرتے ہوئے malloc() میں طریقہ ptr پوائنٹر، ہم نے انٹیجر میموری بلاک کے لیے جگہ مختص کی ہے۔ دی ptr جب ہم سیٹ کرتے ہیں تو پوائنٹر کی قدر بدل جاتی ہے۔ خالی اس کے لیے، ابھی تک جس میموری بلاک کا یہ پہلے ذکر کر رہا تھا اسے جاری نہیں کیا گیا ہے۔ لہذا، ایک یاداشت کا ضیاء نتیجہ نکلے گا.

آؤٹ پٹ



2: دائرہ کار پوائنٹر سے باہر

جب ایک پوائنٹر متغیر اس کا دائرہ کار موجود ہوتا ہے، a یاداشت کا ضیاء C پروگراموں میں ہوتا ہے۔

# شامل کریں
# شامل کریں

int مرکزی ( )
{
int نمبر 1 = 32 نمبر 2 = 23 ;
{
int * رقم = ( int * ) malloc ( کا سائز ( int ) ) ;
* رقم = نمبر 1 + نمبر 2 ;
printf ( '%d \n ' , * رقم ) ;
}
printf ( '%d \n ' , * رقم ) ;
واپسی 0 ;
}

مندرجہ بالا سی پروگرام میں، مرکزی() فنکشن انٹیجر میموری بلاک کو مختص کرنے کے لیے مقامی دائرہ کار کا استعمال کرتا ہے۔ رقم پوائنٹر متغیر. چونکہ ہم نے استعمال کیا۔ رقم نئے بنائے گئے میموری بلاک میں a اور b کے اضافے کو تفویض کرنے کے لیے پوائنٹر، بلاک کی گنجائش ختم ہونے کے بعد بھی میموری بلاک کو مسلسل مختص کیا جاتا ہے۔ لہذا، ایک یاداشت کا ضیاء واقع ہو گا.

آؤٹ پٹ

C میں میموری لیکس کا پتہ لگانا

کی کھوج اور روک تھام میموری لیک پروگرام کے استحکام اور کارکردگی کو برقرار رکھنے کے لیے اہم ہیں۔ دریافت کرنا میموری لیک ، پروگرامرز جیسے ٹولز استعمال کر سکتے ہیں۔ الیکشن گیٹ ، ایک میموری ڈیبگنگ اور پروفائلنگ ٹول۔ الیکشن گیٹ ایک پروگرام میں تمام میموری تک رسائی کو ٹریک کرکے اور مختص میموری جاری نہ ہونے کی نشاندہی کرکے میموری لیک کی شناخت میں مدد کرتا ہے۔

C میں میموری کے اخراج کو روکنا

کو روکنے کے لئے میموری لیک ، ذیل میں دی گئی ہدایات پر عمل کریں۔

1: ہمیشہ مختص شدہ میموری جاری کریں۔
کا استعمال کرتے ہوئے میموری کو ہمیشہ واضح طور پر جاری کیا جانا چاہئے۔ مفت() جیسے فنکشن کا استعمال کرتے ہوئے اسے متحرک طور پر مختص کرنے کے بعد کا طریقہ malloc()، calloc()، یا realloc() . ایسا کرنے سے، یہ یقینی بنایا جاتا ہے کہ میموری سسٹم میں واپس آ گئی ہے اور دوسرے استعمال کے لیے دستیاب ہے۔

2: مختص میموری کی نگرانی
مختص شدہ میموری کی نگرانی کرنا اس بات کو یقینی بنانے کے لیے ضروری ہے کہ جب اس کی مزید ضرورت نہ ہو تو اسے جاری کیا جائے۔ یہ ہر اس میموری پر نظر رکھ کر حاصل کیا جا سکتا ہے جو مختص کی گئی ہے اور اسے جاری کر کے جب اس کی مزید ضرورت نہیں ہے۔

3: پوائنٹرز کا ٹریک رکھیں
پوائنٹرز کو خود بخود میموری کی تقسیم اور ڈیل لوکیشن کو منظم کرنے کے لیے ٹریک کیا جانا چاہیے، میموری کے اخراج کو روکنا۔

4: جامد تجزیہ کے اوزار استعمال کریں۔
تعمیر کے وقت، جامد تجزیہ کے اوزار ممکن شناخت کر سکتے ہیں میموری لیک C پروگراموں میں، جیسے کلینگ اور جی سی سی۔ ایپلیکیشن چلانے سے پہلے، یہ ٹولز ممکنہ میموری لیکس کا پتہ لگانے اور اصلاحی تجاویز دینے میں مدد کر سکتے ہیں۔

مندرجہ ذیل مثال مندرجہ بالا عمل کی وضاحت کرتی ہے۔

# شامل کریں
# شامل کریں
# شامل کریں

int مرکزی ( )
{
int * ptr = ( int * ) malloc ( کا سائز ( int ) ) ;
اگر ( ptr == خالی ) {
printf ( 'میموری مختص کرنے میں خرابی۔ \n ' ) ;
واپسی 1 ;
}
* ptr = 10 ;
printf ( '%d \n ' , * ptr ) ;
مفت ( ptr ) ;
واپسی 0 ;
}

یہ مندرجہ بالا کوڈ سب سے پہلے اس بات کا تعین کرتا ہے کہ آیا میموری مختص کرنا یہ چیک کر کے کامیاب تھا کہ آیا ptr حوالہ نہیں ہے خالی . اگر مختص کرنے میں ناکام ہو جاتا ہے تو کوڈ غلطی کو مناسب طریقے سے سنبھال سکتا ہے۔ اگر مختص کرنا کامیاب رہا تو، کوڈ میموری بلاک کو ایک قدر دیتا ہے۔ 10 اور اسے آؤٹ پٹ کرتا ہے۔ اس کے بعد، کوڈ اس میموری کو جاری کرتا ہے جو استعمال کرکے مختص کی گئی تھی۔ مفت() فنکشن

آؤٹ پٹ

نتیجہ

یادداشت کا لیک ہونا پروگراموں میں اہم مسائل پیدا کر سکتے ہیں، بشمول کارکردگی میں کمی اور کریش۔ یادداشت کے محتاط انتظام، مناسب جانچ، اور میموری کے استعمال کی نگرانی کے ذریعے ایسے مسائل کی نشاندہی اور روک تھام کی جا سکتی ہے۔ اس طرح، پروگرامرز کو میموری لیک ہونے کی صلاحیت سے آگاہ ہونا چاہیے اور انہیں روکنے کے لیے ضروری اقدامات کرنے چاہئیں۔