متحرک میموری میموری مختص C ++ کے ساتھ کیسے کام کریں؟



یہ مضمون متحرک میموری کے لئے مختص C ++ میں ایک اہم خصوصیت کی مدد کرتا ہے جو آپ کو حقیقی وقت کے وسائل کے ل your آپ کی میموری کی ضروریات پر غور کرنے دیتا ہے۔

C ++ میں متحرک میموری کی الاٹمنٹ ایک بہت اہم خصوصیت ہے جو آپ کو حقیقی وقت کے وسائل کی ضرورت سے نمٹنے کے لئے اپنی ضروریات پر غور کرنے کی سہولت دیتی ہے۔ اس مضمون میں ہم تلاش کریں گے تفصیل سے تفتیش۔ اس مضمون میں مندرجہ ذیل اشارے کا احاطہ کیا جائے گا ،

تو آئیے ، ہم C ++ میں متحرک میموری کی الاٹمنٹ کے اس مضمون سے شروع کریں





متحرک میموری مختص کرنے کی ضرورت ہے؟

ہم کہتے ہیں کہ ، ہم کسی جملے کو حرفوں کی صف کی حیثیت سے ان پٹ کرنا چاہتے ہیں لیکن ہمیں صف میں مطلوبہ حرفوں کی صحیح تعداد کے بارے میں یقین نہیں ہے۔

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



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

سی ++ دو غیر متحرک آپریٹرز کی وضاحت کرتا ہے نئی اور حذف کریں جو رن ٹائم کے دوران میموری کو مختص کرنے اور اسے ختم کرنے کا کام انجام دیتے ہیں۔ چونکہ یہ آپریٹرز (نئے اور حذف) مفت اسٹور میموری (ہیپ میموری) پر کام کرتے ہیں ، لہذا انہیں فری اسٹور آپریٹر بھی کہا جاتا ہے۔ پوائنٹرز C ++ میں متحرک میموری مختص کرنے کے نظام کے لئے ضروری معاونت فراہم کرتے ہیں۔

متحرک مختص کی مدد سے ، ایک پروگرام رن ٹائم کے دوران میموری حاصل کرسکتا ہے۔



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

جامد میموری کے مختص اور متحرک میموری کے لئے مختص فرق:

یہ ایک بنیادی میموری فن تعمیر ہے جو کسی بھی C ++ پروگرام کے لئے استعمال ہوتا ہے۔

میموری - متحرک میموری مختص - ایڈورکا

ہمیں اس طرح کی شبیہہ کی ضرورت ہوگی

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

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

ازگر میں __init__ کیا ہے؟

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

اس مضمون کے ساتھ آگے بڑھتے ہوئے C ++ میں متحرک میموری کی الاٹمنٹ

میموری کو استعمال کرتے ہوئے مختص کریں نئی مطلوبہ الفاظ

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

نحو:

ڈیٹا ٹائپ * پوائنٹر_ نام = نیا ڈیٹا ٹائپ

مثال:

int * ptr = new int // ہم متغیر کا اعلان کرسکتے ہیں جبکہ مندرجہ ذیل دو طریقوں سے متحرک مختص۔ int * ptr = new int (10) int * ptr = new int {15} // نئے آپریٹر کو بھی قسم کے ڈیٹا ٹائپ کی میموری کا ایک بلاک (ایک صف) مختص کرنے کے لئے استعمال کیا جاتا ہے۔ int * ptr = new int [20] // مذکورہ بالا بیان مستقل طور پر 20 ٹائم انٹیگرس کے لئے میموری کو مختص کرتا ہے اور قسم کے پہلے عنصر کو ایک پوائنٹر کو ’پی ٹی آر‘ پوائنٹر میں لوٹاتا ہے۔

نوٹ : اگر ڈھیر مختص کرنے کے لئے اتنی میموری نہیں رکھتے ہیں تو ، نئی درخواست استثناء پھینک کر ناکامی کی نشاندہی کرتی ہے std :: Bad_alloc ، جب تک کہ نئے آپریٹر کے ساتھ 'nothrow' استعمال نہ کیا جائے ، اس صورت میں وہ NULL پوائنٹر واپس کرتا ہے۔ لہذا ، پروگرام میں استعمال کرنے سے پہلے نئے کے ذریعہ تیار کردہ پوائنٹر متغیر کی جانچ کرنا ایک اچھا عمل ہے۔

اس مضمون کے ساتھ آگے بڑھتے ہوئے C ++ میں متحرک میموری کی الاٹمنٹ

میموری کا استعمال ختم کرنا حذف کریں مطلوبہ الفاظ:

ایک بار ہیپ میموری کو متغیر یا کلاس آبجیکٹ کے لئے مختص کیا جاتا ہے نئی کلیدی لفظ ، ہم اس میموری کی جگہ کو اس کے استعمال سے ختم کرسکتے ہیں حذف کریں مطلوبہ الفاظ

نحو:

pointter_variable کو حذف کریں // یہاں ، pointter_variable وہ پوائنٹر ہے جو نئے کے ذریعہ تیار کردہ ڈیٹا آبجیکٹ کی طرف اشارہ کرتا ہے۔ حذف کریں [] pointter_variable // پوائنٹر متغیر کے ذریعہ نشاندہی شدہ متحرک میموری کو آزاد کرنے کے لئے ہم حذف کی مندرجہ ذیل شکل کا استعمال کرتے ہیں۔

مثال:

حذف کریں پی ٹی آر ڈیلیٹ کریں [] پی ٹی آر

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

اس مضمون کے ساتھ آگے بڑھتے ہوئے C ++ میں متحرک میموری کی الاٹمنٹ

متحرک طور پر ارے مختص کرنا

متحرک میموری مختص کرنے کے تصور کا سب سے بڑا استعمال میموری کو کسی صف میں مختص کرنے کے لئے ہے جب ہمیں اس کے سائز کی وضاحت کرکے اعلان کرنا ہو لیکن اس کے بارے میں یقین نہیں ہے۔

آئیے دیکھتے ہیں ، اس کے استعمال کو سمجھنے کے لئے ایک مثال۔

پھینک اور پھینک کے درمیان فرق
# نام کی جگہ ایس ٹی ڈی انٹ مین () le انٹ لین ، مجموعہ = 0 کیوٹ کا استعمال کرتے ہوئے شامل کریں<< 'Enter the no. of students in the class' <>لین انٹ * مارکس = نیا انٹ [لین] // متحرک میموری الاٹمنٹ کاؤٹ<< 'Enter the marks of each student' << endl for( int i = 0 i>* (نشان + i)} کے لئے (INT i = 0 i

وضاحت:
اس مثال میں پہلے ہم صارف سے کسی کلاس میں طلباء کی تعداد مانگتے ہیں اور ہم اس کی قیمت لین متغیر میں جمع کرتے ہیں۔ پھر ہم اعداد کا ایک صف تیار کرتے ہیں اور اس بیان کو استعمال کرتے ہوئے لین متغیر میں ذخیرہ شدہ قیمت کے متحرک طور پر میموری میں اس کی جگہ مختص کرتے ہیں۔ * نشان = نئی انٹریٹ [لمبائی] اس طرح اس کو 'لمبائی * (1 کا سائز 1) کے برابر جگہ مختص کیا جاتا ہے عددی) '۔ باقی کوڈ خود وضاحتی ہے۔

اس مضمون کے ساتھ آگے بڑھتے ہوئے C ++ میں متحرک میموری کی الاٹمنٹ

آبجیکٹ کے لئے متحرک میموری مختص

ہم متحرک طور پر بھی اشیاء مختص کرسکتے ہیں۔

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

آبجیکٹ کو تفویض کردہ میموری کو جاری کرنے کے لئے ڈسٹریکٹر کا استعمال کیا جاسکتا ہے۔ اسے مندرجہ ذیل شرائط میں کہا جاتا ہے۔

  • جب کوئی مقامی شے دائرہ کار سے باہر ہو جاتی ہے
  • عالمی آبجیکٹ کے لئے ، جب آپریٹر کلاس کے آبجیکٹ کے پوائنٹر پر لاگو ہوتا ہے

ہم متحرک طور پر اشیاء کو میموری کو مختص کرتے وقت پوائنٹر کا استعمال کرسکتے ہیں۔

آئیے اشیاء کی صف کی ایک مثال دیکھتے ہیں۔

# نام کی جگہ ایس ٹی ڈی کلاس بے ترتیب using عوام کا استعمال شامل کریں: رینڈم () {cout<< 'Constructor' << endl } ~Random() { cout << 'Destructor' << endl } } int main() { Random* a = new Random[3] delete [] a // Delete array return 0 } 

آؤٹ پٹ:

وضاحت:

کنسٹرکٹر کو تین بار بلایا جائے گا چونکہ ہم رینڈم کلاس کے تین اشیاء کو میموری مختص کررہے ہیں۔ ان میں سے ہر شے کے دوران ڈسٹرکٹر کو تین بار بھی بلایا جائے گا۔ ‘رینڈم * ایک = نیا رینڈم [3]’ یہ بیان ہمارے مقصد کی متحرک میموری کے لئے ذمہ دار ہے۔

اس طرح ہم ‘متحرک میموری میموری الاٹیکیشن C ++’ پر اس مضمون کے اختتام کو پہنچے ہیں۔ اگر آپ مزید جاننا چاہتے ہیں تو ، چیک کریں ایڈورکا ، ایک قابل اعتماد آن لائن سیکھنے کی کمپنی کے ذریعے۔ ایڈورکا کا جاوا J2EE اور SOA ٹریننگ اور سرٹیفیکیشن کورس آپ کو ہائبرنیٹ اور اسپرنگ جیسے جاوا کے مختلف فریم ورکوں کے ساتھ ساتھ جاوا کے دونوں بنیادی تصورات کی تربیت کے لئے ڈیزائن کیا گیا ہے۔

ہمارے لئے ایک سوال ہے؟ برائے کرم اس بلاگ کے تبصرے سیکشن میں اس کا تذکرہ کریں اور ہم جلد از جلد آپ کے پاس مل جائیں گے۔