نئے اور malloc کے درمیان فرق ()

مصنف: Laura McKinney
تخلیق کی تاریخ: 1 اپریل 2021
تازہ کاری کی تاریخ: 5 مئی 2024
Anonim
نیا بمقابلہ میلوک (ڈیٹا خلاصہ کے لیے C++)
ویڈیو: نیا بمقابلہ میلوک (ڈیٹا خلاصہ کے لیے C++)

مواد


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

  1. موازنہ چارٹ
  2. تعریف
  3. کلیدی اختلافات
  4. نتیجہ اخذ کرنا

موازنہ چارٹ

موازنہ کی بنیادنئیmalloc ()
زبانآپریٹر نیا سی ++ ، جاوا ، اور سی # کی ایک مخصوص خصوصیت ہے۔ فنکشن malloc () سی کی ایک خصوصیت ہے۔
فطرت"نیا" آپریٹر ہے۔malloc () ایک فنکشن ہے۔
کا سائز( )نئے کو سائز کے آپریٹر کی ضرورت نہیں ہے ، لیکن مخصوص قسم کے لئے کافی حد تک میموری کی ضرورت ہے malloc سائز آپریٹر کی ضرورت کے لئے یہ جانتا ہے کہ اس کے پاس میموری کا کون سا سائز ہے۔
تعمیر کنندہ نیا آپریٹر کسی شے کو بنانے والے کو کال کرسکتا ہے۔malloc () کسی بھی کنسٹرکٹر کو کال نہیں کرسکتا ہے۔
ابتداآپریٹر نیا کسی چیز کو شروع کرسکتا ہے جب اسے میموری مختص کرتے ہو۔میموری کی ابتدا malloc میں نہیں کی جاسکی۔
اوور لوڈنگ نئے آپریٹر کو اوورلوڈ کیا جاسکتا ہے۔malloc () کبھی بھی زیادہ بوجھ نہیں ہوسکتا ہے۔
ناکامیناکامی پر ، آپریٹر نیا مستثنیٰ ہے۔ناکامی پر ، malloc () NULL واپس کرتا ہے۔
عہد نامہ"حذف کریں" کا استعمال کرتے ہوئے نئی کے ذریعہ میموری کی رقم مختص کی گئی۔malloc () کے ذریعہ میموری مختص کرنا ایک مفت () فنکشن کا استعمال کرتے ہوئے معطل ہے۔
دوبارہ منسوخینیا آپریٹر میموری کو دوبارہ تبدیل نہیں کرتا ہے۔malloc () کے ذریعہ مختص کی گئی یادداشت realloc () کا استعمال کرتے ہوئے دوبارہ شروع کی جاسکتی ہے۔
عملدرآمدآپریٹر نیا عملدرآمد کے وقت میں کمی کرتا ہے۔مالاک () کو پھانسی کے ل more زیادہ وقت درکار ہوتا ہے۔


نئی تعریف

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

قسم متغیر_ نام = نئی قسم (پیرامیٹر_ فہرست)؛

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

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


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

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

malloc کی تعریف ()

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

قسم متغیر_ نام = (قسم *) malloc (سائز (قسم))؛

یہاں ، "ٹائپ" متغیر کے ڈیٹا ٹائپ کی نشاندہی کرتا ہے جس کے لئے میموری کو مختص کرنا ہوتا ہے۔ متغیر_عام the اس حوالہ متغیر کا نام ہے جس میں مالکوک () نے لوٹا ہوا پوائنٹر تفویض کیا جائے گا۔ (قسم *) کسی خاص قسم میں میموری کا ایک پوائنٹر حاصل کرنے کے لئے ٹائپ کاسٹنگ کو بیان کرتا ہے۔ سائز () malloc () کی وضاحت کرتا ہے ، کہ میموری کے کس سائز کی ضرورت ہوتی ہے۔

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

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

malloc () فنکشن کے ذریعہ مختص شدہ میموری کو مفت () کا استعمال کرتے ہوئے معطل کردیا جاتا ہے۔ چونکہ فنکشن کال اوورہیڈ کی طرف جاتا ہے ، مالاک () کو پھانسی کے ل more زیادہ وقت درکار ہوتا ہے۔

  1. نیا آپریٹر C ++ میں متعارف کرایا گیا ہے اور جاوا ، C # ، وغیرہ میں استعمال ہوتا ہے دوسری طرف malloc () ایک معیاری لائبریری فنکشن ہے جو صرف C زبان میں پایا جاتا ہے اور اسے C ++ کے ذریعہ سپورٹ کیا جاتا ہے۔
  2. نیا آپریٹر کسی مخصوص قسم کے مقصد کے ل enough کافی میموری مختص کرتا ہے لہذا ، اس میں سائز سازی آپریٹر کی ضرورت نہیں ہے۔ دوسری طرف ، malloc () فنکشن کے سائز () آپریٹر کی ضرورت ہوتی ہے تاکہ فنکشن کو یہ بتادیں کہ اس کے پاس میموری کی کس سائز کو مختص کرنا ہے۔
  3. نیا آپریٹر اعلان کے وقت آبجیکٹ کے کنسٹرکٹر کو کال کرسکتا ہے۔ دوسری طرف ، malloc () فنکشن کنسٹرکٹر کو کال نہیں کرسکتے ہیں۔
  4. آپریٹر ‘نیا’ اوورلوڈ ہوسکتا ہے لیکن مالکو () نہیں ہوسکا۔
  5. اگر نیا آپریٹر میموری کو مختص کرنے میں ناکام ہوجاتا ہے تو ، یہ ایک استثناء پھینک دیتا ہے جسے کوڈ کے ذریعہ سنبھالا جانا چاہئے بصورت دیگر یہ پروگرام ختم ہوجائے گا۔ دوسری طرف ، اگر یہ میموری مختص کرنے میں ناکام ہوجاتا ہے تو malloc () فنکشن ایک NULL پوائنٹر واپس کرتا ہے۔ اگر پوائنٹر کو بغیر جانچے استعمال کیا جاتا ہے تو ، اس کا نتیجہ سسٹم کریش ہوجائے گا۔
  6. نئے آپریٹر کا استعمال کرتے ہوئے جو میموری مختص کی جاتی ہے اسے ‘حذف کریں’ کا استعمال کرکے غیر موزوں کیا جاسکتا ہے۔ دوسری طرف ، malloc () فنکشن کا استعمال کرتے ہوئے مختص شدہ میموری کو مفت () کا استعمال کرتے ہوئے ختم کیا جاسکتا ہے۔
  7. ایک بار جب آپریٹر کا استعمال کرتے ہوئے میموری مختص کردی جاتی ہے ، تو پھر بھی اس کا سائز تبدیل نہیں کیا جاسکتا۔ دوسری طرف ، malloc () فنکشن کا استعمال کرتے ہوئے مختص شدہ میموری کو realloc () فنکشن کا استعمال کرتے ہوئے دوبارہ (دوبارہ سے سائز) دیا جاسکتا ہے۔
  8. malloc () کے مقابلے میں نئے کی پھانسی کا وقت کم ہوتا ہے کیونکہ malloc ایک فنکشن ہے اور نیا کنسٹرکٹ ہے۔

نتیجہ:

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