malloc() & calloc() in C++ in Hindi | malloc() और calloc() हिंदी में :
- C प्रोग्रामिंग भाषा में, मेमोरी प्रबंधन एक महत्वपूर्ण हिस्सा है। जब हम किसी प्रोग्राम को चलाते हैं, तो उस प्रोग्राम को अपनी आवश्यकतानुसार मेमोरी की ज़रूरत होती है।
- आम तौर पर, यह मेमोरी स्टैक या स्टैटिक मेमोरी के रूप में प्रदान की जाती है, लेकिन कभी-कभी डायनामिक मेमोरी की आवश्यकता होती है। डायनामिक मेमोरी अलोकेशन (Dynamic Memory Allocation) के लिए C में कुछ महत्वपूर्ण फ़ंक्शन्स होते हैं,
- जैसे कि malloc() और calloc()। ये फ़ंक्शन्स मेमोरी को रन-टाइम पर अलोकेट (आवंटित) करते हैं।
- malloc() और calloc() दोनों ही डायनामिक मेमोरी आवंटन के लिए उपयोग किए जाते हैं, लेकिन इनके बीच कुछ अंतर होते हैं। आइए इन दोनों को विस्तार से समझें।
Dynamic Memory Allocation in C++ In Hindi | डायनामिक मेमोरी अलोकेशन :
डायनामिक मेमोरी अलोकेशन एक ऐसी प्रक्रिया है जिसमें प्रोग्राम को रन-टाइम पर मेमोरी अलोकेट की जाती है। यह स्टैटिक मेमोरी अलोकेशन से अलग होता है, जिसमें मेमोरी को पहले से निर्धारित आकार में स्टैक में आवंटित किया जाता है।
डायनामिक मेमोरी अलोकेशन के लिए C में निम्नलिखित प्रमुख फ़ंक्शन्स होते हैं:
malloc()
calloc()
realloc()
free()
हम यहाँ मुख्य रूप से malloc() और calloc() पर ध्यान केंद्रित करेंगे।
Memory Allocation in C++ in Hindi malloc() :
malloc() का पूरा नाम Memory Allocation है। यह फ़ंक्शन डायनामिक रूप से मेमोरी आवंटित करता है। जब हम malloc() का उपयोग करते हैं, तो यह एक ब्लॉक के रूप में मेमोरी आवंटित करता है
और उस ब्लॉक का पता (pointer) वापस करता है। यह आवंटित मेमोरी अनिनिशलाइज्ड (uninitialized) होती है, यानी इसमें कुछ भी डेटा स्टोर नहीं होता।
सिंटैक्स (Syntax):
void* malloc(size_t size);
यह फ़ंक्शन मेमोरी के एक ब्लॉक को आवंटित करता है जिसका आकार size होता है, और उस ब्लॉक का पहला एड्रेस रिटर्न करता है।
उदाहरण :
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// डायनामिक मेमोरी आवंटन
ptr = (int*) malloc(5 * sizeof(int)); // 5 integers के लिए मेमोरी आवंटित की गई
if (ptr == NULL) {
printf("Memory not allocated.\n");
exit(0);
} else {
printf("Memory successfully allocated using malloc.\n");
// मेमोरी में डेटा स्टोर करना
for (int i = 0; i < 5; ++i) {
ptr[i] = i + 1;
}
// डेटा प्रदर्शित करना
printf("The elements are: ");
for (int i = 0; i < 5; ++i) {
printf("%d ", ptr[i]);
}
}
// आवंटित मेमोरी मुक्त करना
free(ptr);
return 0;
}
malloc() की विशेषताएँ :
- यह मेमोरी ब्लॉक को डायनामिक रूप से अलोकेट करता है।
- आवंटित की गई मेमोरी में कोई प्रारंभिक मान नहीं होता (uninitialized memory)।
- यह void* टाइप का पॉइंटर लौटाता है, जिसे किसी भी प्रकार के पॉइंटर में कास्ट किया जा सकता है।
- मेमोरी आवंटन विफल होने पर यह NULL लौटाता है।
malloc() के लाभ :
- यह उपयोगकर्ता को रन-टाइम पर मेमोरी आवंटित करने की सुविधा देता है।
- इससे हम मेमोरी का कुशल उपयोग कर सकते हैं, क्योंकि हम जितनी जरूरत हो उतनी मेमोरी आवंटित कर सकते हैं।
malloc() की सीमाएँ :
- malloc() द्वारा आवंटित मेमोरी अनिनिशलाइज्ड होती है, जिससे कभी-कभी इसमें कचरा मान (garbage values) हो सकते हैं।
- यदि मेमोरी अलोकेशन विफल हो जाता है, तो यह NULL लौटाता है, जिससे मेमोरी लीक हो सकता है यदि इसका सही ढंग से उपयोग नहीं किया गया।
calloc() Contiguous Allocation in C++ in Hindi :
calloc() का पूरा नाम Contiguous Allocation है। यह भी डायनामिक मेमोरी आवंटन के लिए उपयोग होता है, लेकिन यह malloc() से थोड़ा अलग तरीके से काम करता है।
calloc() एक बार में कई ब्लॉक्स की मेमोरी को आवंटित करता है और उन्हें शून्य (0) से इनिशलाइज करता है।
सिंटैक्स (Syntax):
void* calloc(size_t num, size_t size);
यह फ़ंक्शन num ब्लॉक्स की मेमोरी को आवंटित करता है, जहाँ हर ब्लॉक का आकार size होता है। और हर ब्लॉक को शून्य (0) से इनिशलाइज करता है।
उदाहरण :
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// डायनामिक मेमोरी आवंटन
ptr = (int*) calloc(5, sizeof(int)); // 5 integers के लिए मेमोरी आवंटित की गई
if (ptr == NULL) {
printf("Memory not allocated.\n");
exit(0);
} else {
printf("Memory successfully allocated using calloc.\n");
// डेटा प्रदर्शित करना
printf("The elements are: ");
for (int i = 0; i < 5; ++i) {
printf("%d ", ptr[i]); // सभी तत्व 0 होंगे, क्योंकि calloc() मेमोरी को शून्य से इनिशलाइज करता है
}
}
// आवंटित मेमोरी मुक्त करना
free(ptr);
return 0;
}
calloc() की विशेषताएँ:
- यह मेमोरी को एकसाथ कई ब्लॉक्स में आवंटित करता है।
- सभी आवंटित ब्लॉक्स को शून्य (0) से इनिशलाइज करता है।
- यह भी void* टाइप का पॉइंटर लौटाता है, जिसे किसी भी प्रकार के पॉइंटर में कास्ट किया जा सकता है।
- यदि मेमोरी आवंटन विफल हो जाता है, तो यह भी NULL लौटाता है।
calloc() के लाभ:
- calloc() द्वारा आवंटित मेमोरी को स्वचालित रूप से शून्य से इनिशलाइज किया जाता है, जिससे कोई कचरा मान नहीं होते।
- यह कई ब्लॉक्स को एक साथ आवंटित करता है, जो कि बेहतर संगठन और आसान उपयोग की सुविधा देता है।
calloc() की सीमाएँ:
- यह malloc() की तुलना में थोड़ा धीमा हो सकता है, क्योंकि यह मेमोरी को शून्य से इनिशलाइज करता है।
- यदि आवश्यक ब्लॉक्स की संख्या और आकार ठीक से परिभाषित नहीं किया जाता है, तो यह मेमोरी लीक कर सकता है।