मॉलॉक () और कॉलोक () फ़ंक्शन को समझने से पहले हमें गतिशील मेमोरी आवंटन के अर्थ को समझने दें। मेमोरी आवंटन कार्यक्रमों और प्रक्रियाओं के निष्पादन के लिए कंप्यूटर मेमोरी को असाइन करने की प्रक्रिया है। हम गतिशील आवंटन तकनीकों का उपयोग करते हैं, जब यह पहले से ज्ञात नहीं है कि कार्यक्रम और प्रक्रिया के लिए मेमोरी स्पेस की कितनी आवश्यकता है।
स्टैटिक मेमोरी एलोकेशन से जुड़ी समस्याओं के कारण डायनेमिक मेमोरी एलोकेशन हो जाता है जैसे कि अगर कम एलिमेंट्स को स्टोर किया जाता है, तो बाकी मेमोरी अनावश्यक रूप से बर्बाद हो जाती है। इसलिए, यह स्टैटिक मेमोरी एलोकेशन की समस्याओं को खत्म कर देता है जहां मेमोरी को केवल तब ही आवंटित किया जाता है जब इसकी आवश्यकता होती है।
तुलना चार्ट
तुलना का आधार | malloc () | calloc () |
---|---|---|
ब्लॉकों की नहीं | मांग की गई स्मृति के एकल ब्लॉक को असाइन करता है। | अनुरोधित मेमोरी के कई ब्लॉक असाइन करता है। |
वाक्य - विन्यास | शून्य * मालॉक (size_t आकार); | शून्य * calloc (size_t num, size_t size); |
प्रारंभ | मॉलोक () स्पष्ट नहीं है और आवंटित मेमोरी को इनिशियलाइज़ करता है। | आवंटित स्मृति को कॉलोक () का उपयोग करके शून्य पर आरंभीकृत किया गया है। |
आवंटन का अधिकारी | मॉलोक () फ़ंक्शन ढेर से आकार 'आकार' की स्मृति आवंटित करता है। | calloc () फ़ंक्शन मेमोरी को आवंटित करता है जिसका आकार संख्या * आकार के बराबर है। |
गति | उपवास | तुलनात्मक रूप से धीमा। |
मॉलोक की परिभाषा ()
मॉलॉक फ़ंक्शन बाइट्स में मेमोरी का एक ब्लॉक प्रदान करता है। उपयोगकर्ता को स्पष्ट रूप से ब्लॉक आकार देना चाहिए, इसे उपयोग के लिए आवश्यक है।
मैलोकोम फंक्शन प्रोग्राम के माध्यम से मेमोरी के आवंटन के लिए सिस्टम के रैम का अनुरोध करता है, अगर अनुरोध स्वीकार किया जाता है (यानी, मैलोडोक फ़ंक्शन मेमोरी को आवंटित करने में सफल होता है), यह मेमोरी के पहले ब्लॉक में एक पॉइंटर लौटाता है। यह पॉइंटर प्रकार का पॉइंटर लौटाता है, जिसका अर्थ है कि किसी भी प्रकार के पॉइंटर को सौंपा जा सकता है।
हालाँकि, यह एक NULL देता है, यदि मैलोडोक फ़ंक्शन स्मृति की आवश्यक मात्रा को आवंटित करने में सक्षम नहीं है। alloc.h
फ़ंक्शन TURBO C, हेडर फ़ाइल alloc.h
या stdlib.h
, और UNIX पर यह हेडर फ़ाइल में उपलब्ध होगा। ।
वाक्य - विन्यास
इस फ़ंक्शन का सिंटैक्स निम्नानुसार है:
malloc(number of elements * size of each element);
उदाहरण के लिए, int *ptr;
ptr=malloc(10*sizeof (int))
जहां आकार बाइट्स में आवश्यक मेमोरी के आकार का प्रतिनिधित्व करता है (यानी, आवंटित की जाने वाली सन्निहित स्मृति स्थानों की संख्या)।
लेकिन जैसा कि पहले उल्लेख किया गया है कि फ़ंक्शन मॉलोक एक शून्य पॉइंटर लौटाता है, फलस्वरूप हमारी आवश्यकता के आधार पर लौटे हुए पॉइंटर प्रकार को बदलने के लिए एक कास्ट ऑपरेटर की आवश्यकता होती है, उपरोक्त घोषणा निम्न रूप में प्रस्तुत की जा सकती है:
ptr_var=(type_cast* ) malloc (size)
जहां ptr_var
उस पॉइंटर का नाम है जो आवंटित मेमोरी ब्लॉक के शुरुआती पते को बरकरार रखता है, type_cast
वह डेटा प्रकार है जिसमें रिटर्न पॉइंटर (या टाइप शून्य) को बदलना है, और आकार बाइट्स में आवंटित ब्लॉक के आकार का वर्णन करता है। ।
उदाहरण के लिए: int *ptr;
ptr=(int*) malloc (10 * size of (int));
मैलोक फ़ंक्शन द्वारा आवंटित मेमोरी में कचरा मूल्य होता है ।
ध्यान दें कि अगर सिस्टम रैम द्वारा दी गई मेमोरी को आवंटित करने के लिए मॉलोक द्वारा संबंधित अनुरोध उत्पन्न होता है, या अस्वीकृत (यदि आवश्यक स्थान उपलब्ध नहीं है तो)। हम उस संपत्ति का उपयोग कर सकते हैं जिसमें मेमोरी की आवश्यक मात्रा को मॉलोक फ़ंक्शन को सौंपा नहीं गया है जो एक NULL देता है।
कॉलोक की परिभाषा ()
कॉलॉक फ़ंक्शन ठीक उसी तरह संचालित होता है जैसे कि मॉलॉक फ़ंक्शन इस तथ्य को छोड़कर कि उसे दो तर्क की आवश्यकता होती है जैसे कि मॉलॉक () के मामले में केवल एक तर्क की आवश्यकता होती है।
उदाहरण के लिए: int*ptr;
ptr = (int*)calloc(10, 2);
यहां 2 एक बाइट में डेटा प्रकार का आकार निर्दिष्ट करता है जिसके लिए हम चाहते हैं कि आवंटन किया जाए, जो कि पूर्णांक के लिए यह मामला 2 है। और 10 उन तत्वों की संख्या को दर्शाता है जिनके लिए आवंटन किया जाना है।
याद रखें कि फ़ंक्शन मॉलोक को पास किया गया तर्क (n * 10) था, यह एक एकल तर्क है कि भ्रमित न हों क्योंकि कई तर्क हमेशा अल्पविराम द्वारा अलग किए जाते हैं। तर्क (n * 10) के बीच कोई अल्पविराम नहीं है। इसलिए यह एक एकल तर्क है, हालांकि एक सरल नहीं बल्कि एक अभिव्यक्ति है।
उपरोक्त घोषणा पर लौटते हुए, उपरोक्त विवरण के निष्पादन के बाद 20 बाइट्स का एक मेमोरी ब्लॉक अनुरोध कार्यक्रम को आवंटित किया जाता है और पहला ब्लॉक का पता अनुरोध कार्यक्रम को सौंपा जाता है, और पहले ब्लॉक का पता पॉइंटर को सौंपा जाता है ptr।
कॉलोक फ़ंक्शन द्वारा आवंटित मेमोरी सभी शून्य पकड़ती है। हेडर फ़ाइल में कॉलोक फ़ंक्शन भी प्राप्य है या
टर्बो सी में।
मॉलॉक और कॉलोक के बीच महत्वपूर्ण अंतर
मॉलोक और कॉलोक कार्यों के बीच प्राथमिक अंतर हैं:
- मांग की गई मेमोरी का एक ब्लॉक ब्लॉकॉक में सौंपा गया है, जबकि अनुरोधित मेमोरी के कई ब्लॉक कॉलोक द्वारा आवंटित किए गए हैं।
- मॉलॉक फ़ंक्शन स्पष्ट नहीं है और आवंटित मेमोरी को इनिशियलाइज़ करता है। इसमें कचरा मूल्य शामिल है और आवंटित मेमोरी के आइटम को बदला नहीं जा सकता है। इसके विपरीत, कॉलोक आवंटित मेमोरी को शून्य पर आरंभीकृत करता है।
- कॉलोक में आरंभीकरण के अतिरिक्त चरणों की आवश्यकता के कारण मॉलॉक तेजी से बढ़ता है लेकिन अंतर नगण्य है।
- इन दोनों के बीच एक और अंतर यह है कि कॉलॉक एक मॉलॉक + मेमसेट है, मेमोरी में फिजिकल पेज आवंटित करता है, जबकि मॉलॉक केवल वर्चुअल एड्रेस में हीप से मेमोरी को असाइन करता है।
निष्कर्ष:
मेमोरी के आवंटन के लिए मॉलोक और कॉलोक दोनों फ़ंक्शन का उपयोग किया जाता है और उनका निश्चित लाभ होता है, और कॉलॉक की तुलना में मॉलोक की तरह नुकसान तेजी से होता है। इसके अलावा, मॉलॉक का उपयोग करना आसान है क्योंकि यह केवल एक तर्क लेता है क्योंकि कॉलोक मेमोरी को आवंटित करता है और जीरो के साथ मेमोरी क्षेत्र को इनिशियलाइज़ करता है। लेकिन जब आप वैरिएबल इनिशियलाइज़ेशन आपके लिए अधिक महत्वपूर्ण होते हैं तो आप कॉलोक का उपयोग करना पसंद करेंगे।