নতুন এবং ম্যালোকের মধ্যে পার্থক্য ()
কন্টেন্ট
নতুন এবং ম্যালোক () উভয়ই মেমরিটিকে গতিশীলভাবে বরাদ্দ করতে ব্যবহৃত হয়। যদিও অনেকগুলি ক্ষেত্রে নতুন এবং ম্যালোক () আলাদা। নতুন এবং ম্যালোক () এর মধ্যে প্রাথমিক পার্থক্য নতুন অপারেটর, একটি নির্মাণ হিসাবে ব্যবহৃত হয়। অন্যদিকে, যদি malloc () রান স্ট্রিম এ মেমরি বরাদ্দ করতে ব্যবহৃত একটি স্ট্যান্ডার্ড লাইব্রেরি ফাংশন। তাদের মধ্যে অন্যান্য পার্থক্যগুলি তুলনা চার্টে নীচে আলোচনা করা হয়েছে:
- তুলনা রেখাচিত্র
- সংজ্ঞা
- মূল পার্থক্য
- উপসংহার
তুলনা রেখাচিত্র
তুলনা করার জন্য বেস | নতুন | malloc () |
---|---|---|
ভাষা | অপারেটর নতুন হ'ল সি ++, জাভা এবং সি # এর একটি নির্দিষ্ট বৈশিষ্ট্য। | ফাংশন malloc () সি এর বৈশিষ্ট্য is |
প্রকৃতি | "নতুন" অপারেটর is | malloc () একটি ফাংশন। |
আকার( ) | নতুন নির্দিষ্ট আকারের জন্য পর্যাপ্ত মেমরি বরাদ্দ না করে আকারের অপারেটরের দরকার নেই | malloc এর মাপের আকারটি কী পরিমাণ বরাদ্দ করতে হয় তা জানার জন্য মাপের অপারেটরের প্রয়োজন। |
নির্মাতা | অপারেটর নতুন কোনও অবজেক্টের কনস্ট্রাক্টরকে কল করতে পারে। | malloc () কোনও নির্মাণকারীকে কল করতে পারে না। |
আরম্ভ | অপারেটর নতুন এটির জন্য মেমরি বরাদ্দ করার সময় কোনও বস্তুর সূচনা করতে পারে। | মেলোকে মেমরির সূচনা করা যায়নি। |
ওভারলোডিং | অপারেটর নতুন ওভারলোড করা যাবে। | ম্যালোক () কখনই ওভারলোড করা যায় না। |
ব্যর্থতা | ব্যর্থতায় অপারেটর নতুন একটি ব্যতিক্রম ছুঁড়ে দেয়। | ব্যর্থতার পরে, malloc () একটি NUL প্রদান করে। |
deallocation | নতুন দ্বারা মেমরি বরাদ্দ, "মুছুন" ব্যবহার করে বিযুক্ত। | Malloc () দ্বারা মেমরি বরাদ্দ একটি ফ্রি () ফাংশন ব্যবহার করে deallocated হয়। |
পদ্ধতিতে পুনরায় বরাদ্দকরণের | নতুন অপারেটর মেমরিটি পুনর্বিবেচনা করে না। | ম্যালোক () দ্বারা বরাদ্দ করা মেমরি রিলোক () ব্যবহার করে পুনরায় স্থান পেতে পারে। |
ফাঁসি | অপারেটর এক্সিকিউশন সময় নতুন কাটা। | Malloc () কার্যকর করার জন্য আরও সময় প্রয়োজন। |
নতুন সংজ্ঞা
চালক নতুন একটি মেমরি বরাদ্দ অপারেটর যা গতিশীলভাবে মেমরি বরাদ্দ করে। নতুন অপারেটর গাদা হয়ে মেমরি বরাদ্দ করে এবং সেই মেমরিটির প্রারম্ভিক ঠিকানাটি দেয় যা একটি রেফারেন্স ভেরিয়েবলের জন্য নির্ধারিত হয়। নতুন অপারেটর সি-তে ম্যালোক () এর অনুরূপ তবে, সি ++ সংকলক ম্যালোক () এর সাথে সামঞ্জস্যপূর্ণ তবে নতুন অপারেটরটি ব্যবহার করা ভাল কারণ এটি ম্যালোক () এর কিছু নির্দিষ্ট সুবিধা রয়েছে। নতুন অপারেটরের সিনট্যাক্সটি নিম্নরূপ:
টাইপ ভেরিয়েবল_নাম = নতুন টাইপ (প্যারামিটার_লিস্ট);
এখানে, "টাইপ করুন" ভেরিয়েবলের ডেটাটাইপ নির্দেশ করে যার জন্য মেমরি বরাদ্দ করতে হয়। "ভেরিয়েবল_নাম" শব্দটি সেই রেফারেন্স ভেরিয়েবলকে দেওয়া নাম যা স্মৃতিতে পয়েন্টার ধরে থাকে। এখানে প্রথম বন্ধনী কনস্ট্রাক্টরের কলিং নির্দিষ্ট করে। প্যারামিটার_লিস্টটি নতুন নির্মিত অবজেক্টটি আরম্ভ করার জন্য কন্সট্রাক্টরের কাছে পাস করা মানগুলির তালিকা।
নতুন অপারেটর একটি নির্দিষ্ট ধরণের অবজেক্টের জন্য প্রয়োজনীয় পর্যাপ্ত মেমরি বরাদ্দ করে। সুতরাং, এটির জন্য কোনও মাপের () অপারেটরের প্রয়োজন হয় না বা মেমোরিটি পুনর্বিবেচনার জন্য মেলোক () যা রিলোক () ব্যবহার করে মেমরিটিকে পুনরায় আকার দেওয়ার প্রয়োজন হয় না। নতুন অপারেটর একটি নির্মাণ; এটি ঘোষণার সময় কোনও অবজেক্টের কনস্ট্রাক্টরকে ডাকে যা সাধারণত অবজেক্টটি আরম্ভ করার জন্য ব্যবহৃত হয়।
আমরা জানি যে নতুন অপারেটর গাদা মধ্যে মেমরি বরাদ্দ করে এবং গাদাটির আকার সীমাবদ্ধ। সুতরাং, যদি গাদাটি মেমরির বাইরে থাকে এবং নতুন অপারেটর মেমরিটি বরাদ্দের চেষ্টা করে, এটি নতুন অপারেটরের ব্যর্থতার দিকে পরিচালিত করবে। নতুন অপারেটর যদি মেমরিটি বরাদ্দ করতে ব্যর্থ হয় তবে এটি একটি ব্যতিক্রম ছুঁড়ে দেবে এবং যদি আপনার কোড সেই ব্যতিক্রমটি পরিচালনা করতে অক্ষম হয় তবে প্রোগ্রামটি অস্বাভাবিকভাবে বন্ধ হয়ে যায়।
অপারেটর দ্বারা বরাদ্দ করা মেমরিটি মুছুন অপারেটরটি ব্যবহার করে মুক্ত করা যেতে পারে। নতুন অপারেটর কার্যকর হওয়ার সময়টি কার্যকর করে কারণ এটি অপারেটর, কোনও ফাংশন নয়।
Malloc সংজ্ঞা ()
দ্য যদি malloc () হ'ল একটি ফাংশন যা হিপগুলিতে অনুরোধকৃত মেমরির পরিমাণ বরাদ্দ করতে ব্যবহৃত হয়। পদ্ধতিটি ‘শূন্য’ প্রকারের পয়েন্টারটি দেয় যা আরও রয়েছে, নির্দিষ্ট ধরণের স্মৃতিতে একটি পয়েন্টার পেতে টাইপ কাস্ট এবং মেমোরিতে এই পয়েন্টারটি একটি রেফারেন্স ভেরিয়েবলের জন্য বরাদ্দ করা হয়। ম্যালোক () ফাংশনটি সি ++ এ নতুন অপারেটরের সাথে সমান কারণ এটি গতিশীলভাবে মেমরি বরাদ্দ করতে ব্যবহৃত হয়। Malloc () একটি স্ট্যান্ডার্ড লাইব্রেরি ফাংশন। ম্যালোক () ফাংশনের সিনট্যাক্সটি নিম্নরূপ:
টাইপ ভেরিয়েবল_নাম = (টাইপ *) ম্যালোক (মাপের (টাইপ));
এখানে, "টাইপ করুন" ভেরিয়েবলের ডেটাটাইপ নির্দেশ করে যার জন্য মেমরি বরাদ্দ করতে হয়। ভেরিয়েবল_নামটি সেই রেফারেন্স ভেরিয়েবলের নাম যেখানে মলোক () দ্বারা প্রত্যাবর্তিত পয়েন্টার নির্ধারিত হবে। (টাইপ *) একটি নির্দিষ্ট ধরণের মেমোরিতে একটি পয়েন্টার পেতে কাস্টিং টাইপ বর্ণনা করে। মাপের () ম্যালোক () বর্ণনা করে, যা মেমরির আকার প্রয়োজন।
Malloc () এর জন্য টাইপ কাস্টিং দরকার কারণ malloc () দ্বারা ফিরে আসা পয়েন্টারটি শূন্য প্রকারের হয়, সুতরাং, বিন্দুতে কোনও প্রকার নির্ধারণ করতে, টাইপ কাস্টিং প্রয়োজন। আকারের () প্রয়োজনীয় কারণ ফাংশন malloc () একটি কাঁচা মেমরি বরাদ্দ করে, এটি malloc () ফাংশনটি বলতে হবে যে এটি কোন মেমরির আকার বরাদ্দ করতে হবে। যদি বরাদ্দ করা মেমরিটি পর্যাপ্ত না হয় তবে এটি পুনরায় আকার বা পুনর্বিবেচনা করতে পারে রিলোক () ব্যবহার করে।
Malloc () ফাংশন হিপ থেকে মেমরি বরাদ্দ করে। যদি ততক্ষণে গাদা স্মৃতিশক্তি ছাড়াই যায় তবে ম্যালোক () ফাংশনটি একটি ন্যূনাল পয়েন্টার দেয়। সুতরাং, malloc () দ্বারা ফিরে পয়েন্টারযুক্ত রেফারেন্স ভেরিয়েবল ব্যবহার করার আগে এটি পরীক্ষা করা উচিত, অন্যথায় এটি সিস্টেম ক্রাশের কারণ হতে পারে।
Malloc () ফাংশন দ্বারা বরাদ্দ করা মেমরিটি ফ্রি () ব্যবহার করে বিচ্ছিন্ন। ফাংশন কল যেমন ওভারহেডের দিকে নিয়ে যায়, ম্যালোক () কার্যকর করার জন্য আরও সময় প্রয়োজন।
- নতুন অপারেটরটি সি ++ তে প্রবর্তিত এবং জাভা, সি # ইত্যাদি ক্ষেত্রে ব্যবহৃত একটি নির্মাণ যা অন্যদিকে ম্যালোক () কেবলমাত্র সি ভাষায় পাওয়া যায় এবং সি ++ দ্বারা সমর্থিত একটি স্ট্যান্ডার্ড লাইব্রেরি ফাংশন।
- নতুন অপারেটর নির্দিষ্ট ধরণের অবজেক্টের জন্য পর্যাপ্ত মেমরি বরাদ্দ করে তাই এর জন্য সাইজিং অপারেটরের প্রয়োজন হয় না। অন্যদিকে, মেলোক () ফাংশনটির জন্য মাপের () অপারেটরের প্রয়োজন ফাংশনটি তা জানতে দেয় যে এটির জন্য মেমরির আকারটি কী বরাদ্দ করতে হবে।
- নতুন অপারেটর ঘোষণার সময় অবজেক্টের কনস্ট্রাক্টরকে কল করতে পারে। অন্যদিকে, malloc () ফাংশনটি কনস্ট্রাক্টরকে কল করতে পারে না।
- অপারেটর ‘নতুন’ ওভারলোড হতে পারে তবে malloc () পারেনি।
- নতুন অপারেটর যদি মেমরি বরাদ্দ করতে ব্যর্থ হয় তবে এটি একটি ব্যতিক্রম ছুঁড়ে দেয় যা অবশ্যই কোড দ্বারা পরিচালিত হবে অন্যথায় প্রোগ্রামটি সমাপ্ত হবে। অন্যদিকে, মেলোক () ফাংশনটি যদি মেমরি বরাদ্দ করতে ব্যর্থ হয় তবে একটি ন্যূনাল পয়েন্টার দেয়। যদি এটি পরীক্ষা না করে পয়েন্টার ব্যবহার করা হয় তবে এটির ফলে সিস্টেম ক্রাশ হবে।
- নতুন অপারেটর ব্যবহার করে বরাদ্দ করা মেমরিটি ‘মুছুন’ ব্যবহার করে বিচ্ছিন্ন করা যেতে পারে। অন্যদিকে, malloc () ফাংশন ব্যবহার করে বরাদ্দ করা মেমরিটি ফ্রি () ব্যবহার করে বিলোপযুক্ত হতে পারে।
- একবার নতুন অপারেটর ব্যবহার করে মেমরি বরাদ্দ হয়ে গেলে, যাইহোক এটির আকার পরিবর্তন করা যাবে না। অন্যদিকে, ম্যালোক () ফাংশন ব্যবহার করে বরাদ্দ করা মেমরিটি রিলোক () ফাংশন ব্যবহার করে পুনরায় স্থান পরিবর্তন করতে (পুনরায় আকার দেওয়া) যেতে পারে।
- Malloc () এর তুলনায় নতুনটির নির্বাহের সময় কম হয় কারণ malloc একটি ফাংশন এবং নতুন একটি কনস্ট্রাক্ট।
উপসংহার:
ম্যালোক () ফাংশনটি মেমরিটিকে গতিশীলভাবে বরাদ্দ দেওয়ার পুরানো উপায়। আজকাল, নতুন অপারেটরটি রানটাইমে মেমরির বরাদ্দ করতে ব্যবহৃত হয় কারণ এর ম্যালোক () এর কিছু বেশি সুবিধা রয়েছে।