malloc() और calloc() के बीच अंतर
malloc() बनाम calloc() के बीच मुख्य अंतर
- malloc() फ़ंक्शन केवल प्रारंभिक पता लौटाता है और इसे शून्य नहीं करता है, दूसरी ओर, calloc() फ़ंक्शन प्रारंभिक पता लौटाता है और इसे शून्य कर देता है।
- Malloc फ़ंक्शन में, तर्कों की संख्या 1 होती है, जबकि calloc फ़ंक्शन में, तर्कों की संख्या 2 होती है।
- malloc() की समय दक्षता calloc() से अधिक है, जबकि malloc() calloc() की तुलना में सुरक्षित नहीं है
- malloc मेमोरी को आरंभीकृत नहीं करता है, जबकि calloc मेमोरी को आरंभीकृत करता है।

डायनेमिक मेमोरी एलोकेशन क्या है?
गतिशील स्मृति आवंटन रन टाइम पर मेमोरी आवंटित करने की एक प्रक्रिया है। चार लाइब्रेरी रूटीन हैं, calloc(), free(), रीयलोक (), और malloc() जिसका उपयोग मेमोरी आवंटित करने और प्रोग्राम निष्पादन के दौरान इसे खाली करने के लिए किया जा सकता है। इन रूटीन को stdlib.h नामक हेडर फ़ाइल में परिभाषित किया गया है।
malloc() क्या है?
यह एक ऐसा फ़ंक्शन है जिसका उपयोग मेमोरी के ब्लॉक को गतिशील रूप से आवंटित करने के लिए किया जाता है। यह निर्दिष्ट आकार का मेमोरी स्पेस आरक्षित करता है और मेमोरी लोकेशन की ओर इशारा करते हुए नल पॉइंटर लौटाता है।
लौटाया गया पॉइंटर आमतौर पर void प्रकार का होता है। इसका मतलब है कि हम किसी भी पॉइंटर को malloc फ़ंक्शन असाइन कर सकते हैं। malloc का पूरा नाम मेमोरी एलोकेशन है।
calloc() क्या है?
Calloc() फ़ंक्शन मेमोरी के कई ब्लॉक आवंटित करने के लिए उपयोग किया जाता है। यह एक गतिशील मेमोरी आवंटन फ़ंक्शन है जिसका उपयोग जटिल डेटा संरचनाओं जैसे कि सरणियों और संरचनाओं को मेमोरी आवंटित करने के लिए किया जाता है। यदि यह फ़ंक्शन निर्दिष्ट के अनुसार पर्याप्त स्थान आवंटित करने में विफल रहता है, तो यह शून्य पॉइंटर लौटाता है। कॉलोक फ़ंक्शन का पूर्ण रूप कॉन्टिगुअस एलोकेशन है।
malloc() और calloc() के बीच अंतर
malloc() और calloc() के बीच महत्वपूर्ण अंतर इस प्रकार हैं:
malloc () | कॉलोक () |
---|---|
Malloc() फ़ंक्शन उपयोगकर्ता द्वारा निर्दिष्ट आकार का एकल मेमोरी ब्लॉक बनाएगा। | Calloc() फ़ंक्शन किसी चर के लिए मेमोरी के एकाधिक ब्लॉक असाइन कर सकता है। |
Malloc फ़ंक्शन में कचरा मान शामिल है. | calloc फ़ंक्शन द्वारा आवंटित मेमोरी ब्लॉक को हमेशा शून्य पर आरंभ किया जाता है। |
तर्क की संख्या 1 है. | तर्कों की संख्या 2 है. |
Calloc, malloc से धीमा है। | Malloc, calloc से अधिक तेज़ है। |
यह calloc की तुलना में सुरक्षित नहीं है। | malloc की तुलना में इसका उपयोग सुरक्षित है। |
समय दक्षता calloc() से अधिक है. | समय दक्षता malloc() से कम है. |
Malloc() फ़ंक्शन केवल प्रारंभिक पता लौटाता है और उसे शून्य नहीं करता। | पता आवंटित करने से पहले, Calloc() फ़ंक्शन प्रारंभिक पता लौटाता है और इसे शून्य कर देता है। |
यह मेमोरी का आरंभीकरण नहीं करता है। | यह मेमोरी आरंभीकरण का कार्य करता है। |
malloc() का सिंटैक्स
यहाँ malloc() का सिंटैक्स दिया गया है
ptr = (cast_type *) malloc (byte_size);
उपरोक्त सिंटैक्स में, ptr cast_type का पॉइंटर है। malloc फ़ंक्शन byte_size की आवंटित मेमोरी के लिए एक पॉइंटर लौटाता है।
Example: ptr = (int *) malloc (50)
जब यह कथन सफलतापूर्वक निष्पादित होता है, तो 50 बाइट्स का मेमोरी स्पेस आरक्षित होता है। आरक्षित स्थान के पहले बाइट का पता int प्रकार के पॉइंटर “ptr” को सौंपा जाता है।
calloc() का सिंटैक्स
यहाँ malloc() का सिंटैक्स दिया गया है
ptr = (cast_type *) calloc (n, size);
उपरोक्त सिंटैक्स का उपयोग समान आकार के n मेमोरी ब्लॉक आवंटित करने के लिए किया जाता है। मेमोरी स्पेस आवंटित होने के बाद, सभी बाइट्स को शून्य पर आरंभीकृत किया जाता है। पॉइंटर, जो वर्तमान में आवंटित मेमोरी स्पेस के पहले बाइट पर है, वापस कर दिया जाता है।
C में malloc() का उदाहरण
नीचे दिए गए कोड में, sizeof(*ptr) का उपयोग 15 पूर्णांकों का मेमोरी ब्लॉक आवंटित करने के लिए किया जाता है। printf कथन में, हम 6वें पूर्णांक का मान ज्ञात कर रहे हैं।
#include<stdlib.h> #include<stdio.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); if (ptr != NULL) { *(ptr + 5) = 480; printf("Value of the 6th integer is %d",*(ptr + 5)); } }
आउटपुट:
6वें पूर्णांक का मान 480 है
C में calloc() का उदाहरण
नीचे दिया गया C भाषा प्रोग्राम पहले दस पदों का योग निकालता है। यदि पॉइंटर मान शून्य है, तो मेमोरी स्पेस आवंटित नहीं किया जाएगा।
फॉर लूप का उपयोग किसी वैरिएबल “i” के मान को दोहराने और योग को प्रिंट करने के लिए किया जाता है। अंत में, पॉइंटर को मुक्त करने के लिए फ़ंक्शन फ्री का उपयोग किया जाता है।
#include <stdio.h> #include <stdlib.h> int main() { int i, * ptr, sum = 0; ptr = calloc(10, sizeof(int)); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } printf("Building and calculating the sequence sum of the first 10 terms \n"); for (i = 0; i < 10; ++i) { * (ptr + i) = i; sum += * (ptr + i); } printf("Sum = %d", sum); free(ptr); return 0; }
आउटपुट:
पहले 10 पदों के अनुक्रम योग का निर्माण और गणना n योग = 45
malloc() का उपयोग क्यों करें?
malloc() का उपयोग करने के कारण यहां दिए गए हैं
- जब आपको रनटाइम पर मेमोरी आवंटित करनी हो तो आपको malloc() का उपयोग करना चाहिए।
- आपको malloc का उपयोग तब करना चाहिए जब आपको ऐसे ऑब्जेक्ट आवंटित करने हों जो वर्तमान मेमोरी ब्लॉक के निष्पादन से परे मौजूद होने चाहिए।
- यदि आपको उस स्टैक के आकार से अधिक मेमोरी आवंटित करने की आवश्यकता है तो malloc() का उपयोग करें।
- यह आवंटित स्थान के पहले बाइट का पॉइंटर लौटाता है।
- यह डेवलपर्स को आवश्यकतानुसार सटीक मात्रा में मेमोरी आवंटित करने में सक्षम बनाता है।
- यह फ़ंक्शन हीप से बाइट्स का मेमोरी ब्लॉक आकार आवंटित करता है।
calloc() का उपयोग क्यों करें?
calloc() का उपयोग करने के कारण यहां दिए गए हैं
- जब आपको आवंटित मेमोरी को शून्य पर सेट करना हो।
- आप calloc का उपयोग कर सकते हैं जो मेमोरी हीप तक पहुंच प्राप्त करने के लिए एक पॉइंटर लौटाता है।
- इसका उपयोग तब किया जाता है जब आपको मेमोरी में पॉइंटर लौटाने के लिए तत्वों को शून्य पर आरंभ करने की आवश्यकता होती है।
- malloc() के साथ संभव ओवरफ़्लो को रोकने के लिए
- calloc() का उपयोग उस पृष्ठ का अनुरोध करने के लिए करें जो पहले से ही शून्य हो चुका है।