तुलना चार्ट
तुलना के लिए आधार | नया | मैलोक () |
---|---|---|
भाषा | ऑपरेटर नया C ++, जावा और C # की एक विशिष्ट विशेषता है। | फ़ंक्शन मॉलोक () सी की एक विशेषता है। |
प्रकृति | "नया" एक ऑपरेटर है। | मॉलोक () एक फ़ंक्शन है। |
इस आकार का( ) | नए आकार के ऑपरेटर की जरूरत नहीं है क्योंकि यह विशिष्ट प्रकार के लिए पर्याप्त मेमोरी आवंटित करता है | मैलोडॉक को यह पता करने के लिए साइज़ोफ़ ऑपरेटर की आवश्यकता होती है कि उसे किस मेमोरी का आकार आवंटित करना है। |
निर्माता | ऑपरेटर नया ऑब्जेक्ट के कंस्ट्रक्टर को कॉल कर सकता है। | मॉलॉक () एक निर्माता को कॉल करने के लिए बिल्कुल भी नहीं कर सकता है। |
प्रारंभ | ऑपरेटर नया किसी ऑब्जेक्ट को स्मृति को आवंटित करते समय प्रारंभ कर सकता है। | मैल्मोक में मेमोरी आरंभीकरण नहीं किया जा सका। |
ओवरलोडिंग | ऑपरेटर नया ओवरलोड हो सकता है। | मालॉक () को कभी भी ओवरलोड नहीं किया जा सकता है। |
असफलता | विफलता पर, ऑपरेटर नया एक अपवाद फेंकता है। | असफल होने पर, मॉलॉक () एक पूर्ण रिटर्न देता है। |
आवंटन रद्द | नए द्वारा मेमोरी आवंटन, "डिलीट" का उपयोग करके निपटाया गया। | मॉलोक () द्वारा मेमोरी आवंटन को एक नि: शुल्क () फ़ंक्शन का उपयोग करके निपटाया जाता है। |
पुनः आबंटन | नया ऑपरेटर मेमोरी को पुनः लोड नहीं करता है। | Malloc () द्वारा आवंटित मेमोरी को realloc () का उपयोग करके पुनः प्राप्त किया जा सकता है। |
क्रियान्वयन | ऑपरेटर नया निष्पादन समय में कटौती करता है। | मालॉक () को निष्पादन के लिए अधिक समय की आवश्यकता होती है। |
नई की परिभाषा
ऑपरेटर नया एक मेमोरी आवंटन ऑपरेटर है जो मेमोरी को गतिशील रूप से आवंटित करता है। नया ऑपरेटर हीप में मेमोरी आवंटित करता है और उस मेमोरी का शुरुआती पता देता है जिसे एक रेफरेंस वैरिएबल को सौंपा गया है। नया ऑपरेटर सीलोक में मॉलोक () के समान है। हालांकि, सी ++ कंपाइलर मॉलोक () के साथ संगत है, लेकिन, नए ऑपरेटर का उपयोग करना सबसे अच्छा है क्योंकि यह मॉलोक () पर कुछ फायदे हैं। नए ऑपरेटर का सिंटैक्स निम्नानुसार है:
type__name = नया प्रकार (पैरामीटर_लिस्ट);
यहां, "प्रकार" उस चर के डेटाटाइप को दर्शाता है जिसके लिए मेमोरी को आवंटित किया जाना है। शब्द "variable_name" संदर्भ चर को दिया गया नाम है जो कि सूचक को मेमोरी में रखता है। यहाँ कोष्ठक कंस्ट्रक्टर की कॉलिंग को निर्दिष्ट करता है। पैरामीटर_लिस्ट उन मानों की सूची है जो नवनिर्मित ऑब्जेक्ट को आरंभीकृत करने के लिए कंस्ट्रक्टर को पास किए जाते हैं।
नया ऑपरेटर एक विशिष्ट प्रकार के ऑब्जेक्ट के लिए आवश्यक पर्याप्त मेमोरी आवंटित करता है। इसलिए, इसे आकार () ऑपरेटर की आवश्यकता नहीं होती है और न ही इसे मेमोरी को आकार देने के लिए मॉलॉक () की तरह मेमोरी का आकार बदलने की आवश्यकता होती है। नया ऑपरेटर एक निर्माण है; यह घोषणा करते समय एक वस्तु के निर्माता को बुलाता है जो आमतौर पर वस्तु को इनिशियलाइज़ करने के लिए उपयोग किया जाता है।
हम जानते हैं कि नया ऑपरेटर ढेर में मेमोरी आवंटित करता है और ढेर का आकार सीमित होता है। इसलिए, यदि ढेर मेमोरी से बाहर है और नया ऑपरेटर मेमोरी को आवंटित करने का प्रयास करता है, तो यह नए ऑपरेटर की विफलता को जन्म देगा। यदि नया ऑपरेटर मेमोरी आवंटित करने में विफल रहता है, तो यह एक अपवाद फेंक देगा, और यदि आपका कोड उस अपवाद को संभालने में असमर्थ है, तो प्रोग्राम असामान्य रूप से समाप्त हो जाता है।
हटाए गए ऑपरेटर का उपयोग करके ऑपरेटर द्वारा आवंटित की गई मेमोरी को मुक्त किया जा सकता है। नया ऑपरेटर निष्पादन समय को काट देता है क्योंकि यह एक ऑपरेटर है, फ़ंक्शन नहीं।
मॉलोक की परिभाषा ()
मॉलोक () एक फ़ंक्शन है जिसका उपयोग ढेर पर मेमोरी की अनुरोधित मात्रा को आवंटित करने के लिए किया जाता है। विधि 'शून्य' प्रकार के पॉइंटर को लौटाती है जो आगे है, एक निर्दिष्ट प्रकार की मेमोरी को पॉइंटर प्राप्त करने के लिए टाइप किया जाता है और मेमोरी को यह पॉइंटर एक संदर्भ चर को सौंपा जाता है। मॉलोक () फ़ंक्शन सी ++ में नए ऑपरेटर के समान है क्योंकि इसका उपयोग गतिशील रूप से मेमोरी आवंटित करने के लिए किया जाता है। द मॉलोक () एक मानक लाइब्रेरी फ़ंक्शन है। मॉलोक () फ़ंक्शन का सिंटैक्स निम्नानुसार है:
type__name = (टाइप *) मॉलोक (आकार प्रकार);
यहां, "प्रकार" उस चर के डेटाटाइप को इंगित करता है जिसके लिए मेमोरी आवंटित की जानी है। वेरिएबल_नाम उस रेफरेंस वेरिएबल का नाम है, जिसके द्वारा पॉलीकटर को मॉलोक () द्वारा लौटाया जाएगा। प्रकार (प्रकार *) एक विशिष्ट प्रकार में मेमोरी को पॉइंटर प्राप्त करने के लिए टाइप कास्टिंग का वर्णन करता है। Sizeof () मॉलॉक () का वर्णन करता है, कि मेमोरी का आकार क्या है।
मॉलोक () को टाइप कास्टिंग की आवश्यकता होती है क्योंकि पॉलीकॉटर को मॉलॉक () द्वारा लौटा दिया जाता है, इसलिए, पॉइंटर को टाइप करने के लिए टाइप कास्टिंग की आवश्यकता होती है। आकार () की आवश्यकता है क्योंकि फ़ंक्शन मॉलोक () एक कच्ची मेमोरी आवंटित करता है इसलिए, मॉलॉक () फ़ंक्शन को यह बताना आवश्यक है कि इसे किस मेमोरी आकार को आवंटित करना है। यदि आबंटित मेमोरी पर्याप्त नहीं है, तो इसे रियलकॉक () का उपयोग करके आकार बदला जा सकता है।
मॉलोक () फ़ंक्शन ढेर पर मेमोरी आवंटित करता है। मामले में, ढेर स्मृति से बाहर है, तो मॉलॉक () फ़ंक्शन एक NULL पॉइंटर लौटाता है। इसलिए, पॉलीमर युक्त रेफ़रेंट पॉलीमर को मॉलोक () द्वारा लौटाया जाता है, इसका उपयोग करने से पहले जाँच की जानी चाहिए, अन्यथा इसके परिणामस्वरूप सिस्टम क्रैश हो सकता है।
मैलोडोक () फ़ंक्शन द्वारा आवंटित मेमोरी को मुफ्त () का उपयोग करके निपटाया जाता है। चूंकि फ़ंक्शन कॉल एक ओवरहेड की ओर जाता है, इसलिए मलोक () को निष्पादन के लिए अधिक समय की आवश्यकता होती है।
नए और मैलोक के बीच महत्वपूर्ण अंतर ()
- नया ऑपरेटर एक निर्माण है जो C ++ में पेश किया गया है और जावा, C #, आदि में उपयोग किया जाता है। दूसरी तरफ मॉलोक () एक मानक लाइब्रेरी फ़ंक्शन है जो केवल C भाषा में पाया जाता है और C ++ द्वारा समर्थित है।
- नया ऑपरेटर एक निर्दिष्ट प्रकार के ऑब्जेक्ट के लिए पर्याप्त मेमोरी आवंटित करता है, इसलिए इसे साइजिंग ऑपरेटर की आवश्यकता नहीं है। दूसरी ओर, मॉलॉक () फ़ंक्शन को फ़ंक्शन को यह बताने के लिए साइज़ोफ़ () ऑपरेटर की आवश्यकता होती है कि उसे किस मेमोरी का आकार आवंटित करना है।
- नए ऑपरेटर घोषणा करते समय ऑब्जेक्ट के निर्माता को कॉल कर सकते हैं। दूसरी ओर, मॉलॉक () फ़ंक्शन निर्माता को कॉल नहीं कर सकता है।
- ऑपरेटर 'नया' ओवरलोड हो सकता है लेकिन मॉलोक () नहीं कर सकता।
- यदि नया ऑपरेटर मेमोरी आवंटित करने में विफल रहता है, तो यह एक अपवाद को फेंकता है जिसे कोड द्वारा नियंत्रित किया जाना चाहिए अन्यथा कार्यक्रम समाप्त हो जाएगा। दूसरी ओर, मैलोडोक () फ़ंक्शन एक NULL पॉइंटर लौटाता है यदि यह मेमोरी आवंटित करने में विफल रहता है। यदि पॉइंटर का उपयोग बिना जांच के किया जाता है, तो यह सिस्टम क्रैश के परिणामस्वरूप होगा।
- एक नए ऑपरेटर का उपयोग करके आवंटित की गई मेमोरी को 'डिलीट' का उपयोग करके निपटाया जा सकता है। दूसरी तरफ, मैलोक () फ़ंक्शन का उपयोग करके आवंटित मेमोरी को मुफ्त () का उपयोग करके निपटाया जा सकता है।
- एक बार एक नए ऑपरेटर का उपयोग करके मेमोरी आवंटित होने के बाद, इसे किसी भी तरह से बदला नहीं जा सकता है। दूसरी ओर, मैलोडोक () फ़ंक्शन का उपयोग करके आवंटित की गई मेमोरी को रियलकॉक () फ़ंक्शन का उपयोग करके पुन: व्यवस्थित (आकार बदला) किया जा सकता है।
- मॉलॉक () की तुलना में नए का निष्पादन समय कम है क्योंकि मॉलॉक एक कार्य है और नया एक निर्माण है।
निष्कर्ष:
मैलोडॉक () फ़ंक्शन स्मृति को गतिशील रूप से आवंटित करने का पुराना तरीका है। आजकल, नए ऑपरेटर का उपयोग रनटाइम पर मेमोरी को आवंटित करने के लिए किया जाता है, क्योंकि इसमें मॉलोक () पर कुछ फायदे हैं।