BCA / B.Tech 11 min read

Memory Allocation in Hindi

Memory Allocation in C++ in Hindi | C++ में मेमोरी आवंटन  हिंदी में :


मेमोरी आवंटन (Memory Allocation in Hindi) क्या है ?

  • मेमोरी आवंटन (Memory Allocation) एक महत्वपूर्ण प्रक्रिया है जिसका उपयोग कंप्यूटर प्रोग्राम्स और सॉफ़्टवेयर द्वारा मेमोरी में डेटा स्टोर करने के लिए किया जाता है। यह वह प्रक्रिया है जिसमें कंप्यूटर सिस्टम किसी प्रोग्राम या प्रोसेस को उसकी आवश्यकतानुसार मेमोरी (RAM)
  •  प्रदान करता है, ताकि वह सही ढंग से कार्य कर सके। C++, Java, Python, और अन्य प्रोग्रामिंग भाषाओं में मेमोरी आवंटन का एक प्रमुख हिस्सा है, जो प्रोग्राम की कार्यक्षमता और परफॉर्मेंस को प्रभावित करता है।

इस लेख में हम मेमोरी आवंटन, इसके प्रकार, लाभ-हानि और इसके कार्य के बारे में विस्तार से चर्चा करेंगे।

मेमोरी आवंटन क्या है? (What is Memory Allocation?)

  • मेमोरी आवंटन वह प्रक्रिया है जिसमें प्रोग्राम को आवश्यकतानुसार सिस्टम की मुख्य मेमोरी (RAM) से मेमोरी ब्लॉक्स प्रदान किए जाते हैं, ताकि वह अपने कार्यों को सही ढंग से पूरा कर सके। जब भी कोई प्रोग्राम रन होता है, 
  • तो ऑपरेटिंग सिस्टम उसे कुछ मेमोरी प्रदान करता है, ताकि वह अपनी गणनाएँ और डेटा स्टोरेज के कार्य कर सके।

मेमोरी आवंटन मुख्य रूप से दो प्रकार का होता है:

स्थिर (Static) मेमोरी आवंटन
गतिक (Dynamic) मेमोरी आवंटन

Static Memory Allocation in C++ in Hindi | स्थिर मेमोरी आवंटन :

स्थिर मेमोरी आवंटन वह प्रक्रिया है जिसमें मेमोरी को प्रोग्राम के संकलन (compile-time) के समय ही आवंटित किया जाता है। इसका मतलब यह है कि मेमोरी की मात्रा और उसका स्थान प्रोग्राम के चलने से पहले ही तय हो जाता है। एक बार जब मेमोरी आवंटित हो जाती है, तो उसे प्रोग्राम की अवधि के दौरान परिवर्तित नहीं किया जा सकता है।

Features of Static Memory Allocation in C++ in Hindi | विशेषताएँ :

  • Compile-Time Allocation: मेमोरी का आवंटन प्रोग्राम के संकलन के समय ही होता है।
  • स्थिरता (Fixed Size): एक बार आवंटित होने के बाद मेमोरी का आकार बदला नहीं जा सकता।
  • डेटा का स्थायित्व (Data Permanence): प्रोग्राम के चलने की अवधि के दौरान मेमोरी का आवंटन स्थिर रहता है।

उदाहरण (Example of Static Memory Allocation):

#include <iostream>
using namespace std;

int main() {
    int arr[5];  // स्थिर मेमोरी आवंटन
    arr[0] = 10;
    arr[1] = 20;
    cout << "Array element: " << arr[0] << endl;
    return 0;
}
ऊपर दिए गए उदाहरण में, arr नामक एक स्थिर आकार का ऐरे बनाया गया है, जिसे पहले से ही मेमोरी आवंटित कर दी गई है।

Advantages of Static Memory Allocation in C++ in Hindi | स्थिर मेमोरी आवंटन के लाभ :

  • सरलता (Simplicity): यह आसानी से लागू किया जा सकता है और प्रोग्रामिंग के लिए सरल होता है।
  • त्वरित निष्पादन (Fast Execution): मेमोरी पहले से ही आवंटित होती है, जिससे मेमोरी एक्सेस तेज होता है।
  • कम ओवरहेड (Less Overhead): चूंकि मेमोरी को रन-टाइम के दौरान आवंटित या डीलोकेट नहीं किया जाता, इसलिए इसमें कम ओवरहेड होता है।

स्थिर मेमोरी आवंटन के नुकसान (Disadvantages of Static Memory Allocation):

  • मेमोरी की बर्बादी (Memory Wastage): अगर आवंटित मेमोरी की आवश्यकता नहीं होती, तो मेमोरी बर्बाद हो जाती है।
  • लचीलापन की कमी (Lack of Flexibility): प्रोग्राम के दौरान मेमोरी का आकार नहीं बदला जा सकता।
  • डाइनामिक डेटा स्ट्रक्चर के लिए अनुपयुक्त (Unsuitable for Dynamic Data Structures): यह विधि उन डेटा संरचनाओं के लिए उपयुक्त नहीं होती जिनका आकार रन-टाइम पर बदलता रहता है, जैसे लिंक्ड लिस्ट, स्टैक आदि।

Dynamic Memory Allocation in C++ in Hindi | गतिक मेमोरी आवंटन :

  • गतिक मेमोरी आवंटन वह प्रक्रिया है जिसमें मेमोरी को प्रोग्राम के रन-टाइम (run-time) के दौरान आवश्यकतानुसार आवंटित किया जाता है। यह विधि तब उपयोगी होती है जब प्रोग्राम के दौरान हमें यह नहीं पता होता कि कितनी मेमोरी की आवश्यकता होगी।
  • गतिक मेमोरी आवंटन प्रोग्रामिंग भाषाओं में फ़ंक्शन्स जैसे malloc(), calloc(), realloc() और free() (C/C++ में) का उपयोग करके किया जाता है। Java और Python जैसी उच्च स्तरीय भाषाओं में, मेमोरी आवंटन ऑटोमैटिक रूप से होता है और प्रोग्रामर को मेमोरी प्रबंधन की चिंता नहीं करनी पड़ती।

विशेषताएँ (Features of Dynamic Memory Allocation):

  • Run-Time Allocation: मेमोरी का आवंटन प्रोग्राम के चलने के दौरान होता है।
  • लचीला (Flexible): प्रोग्राम के दौरान मेमोरी के आकार को बदला जा सकता है।
  • डेटा संरचनाओं के लिए उपयुक्त (Suitable for Data Structures): यह विधि लिंक्ड लिस्ट, स्टैक, क्यू जैसी डेटा संरचनाओं के लिए बहुत उपयोगी होती है।

उदाहरण (Example of Dynamic Memory Allocation in C++):

#include <iostream>
using namespace std;

int main() {
    int *arr;
    int size;
    
    cout << "Enter the size of the array: ";
    cin >> size;

    arr = new int[size];  // गतिक मेमोरी आवंटन

    for(int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }

    cout << "Array elements: ";
    for(int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }

    delete[] arr;  // मेमोरी मुक्त करना
    return 0;
}
ऊपर के उदाहरण में, उपयोगकर्ता द्वारा इनपुट किए गए आकार के आधार पर मेमोरी गतिक रूप से आवंटित की जाती है और फिर उसे delete[] का उपयोग करके मुक्त किया जाता है।

गतिक मेमोरी आवंटन के लाभ (Advantages of Dynamic Memory Allocation):

  • मेमोरी का कुशल उपयोग (Efficient Use of Memory): मेमोरी केवल तब आवंटित की जाती है जब उसकी आवश्यकता होती है, जिससे मेमोरी की बर्बादी नहीं होती।
  • लचीलापन (Flexibility): प्रोग्राम के दौरान मेमोरी को बढ़ाया या घटाया जा सकता है।
  • बड़े डेटा के लिए उपयुक्त (Suitable for Large Data): यह विधि बड़े और जटिल डेटा संरचनाओं के साथ काम करने के लिए उपयुक्त होती है।

गतिक मेमोरी आवंटन के नुकसान (Disadvantages of Dynamic Memory Allocation):

  • मेमोरी लीकेज का खतरा (Risk of Memory Leakage): अगर प्रोग्राम में आवंटित मेमोरी को सही तरीके से मुक्त नहीं किया जाता, तो मेमोरी लीकेज की समस्या उत्पन्न हो सकती है।
  • धीमी गति (Slower Execution): मेमोरी आवंटन और डीलोकेशन रन-टाइम पर होने के कारण यह धीमी गति से हो सकता है।
  • जटिलता (Complexity): गतिक मेमोरी आवंटन का उपयोग करना जटिल हो सकता है और इसमें प्रोग्रामर को मेमोरी प्रबंधन के बारे में सतर्क रहना पड़ता है।

Types of Memory Allocation in C++ in Hindi | मेमोरी आवंटन के प्रकार :

मेमोरी आवंटन को दो मुख्य श्रेणियों में विभाजित किया जा सकता है:

  • Heap Memory Allocation: यह वह मेमोरी क्षेत्र होता है जहाँ गतिक मेमोरी आवंटन होता है। इसे "heap" कहा जाता है, और इस पर प्रोग्रामर का पूरा नियंत्रण होता है। प्रोग्रामर को खुद से मेमोरी आवंटित और मुक्त करनी पड़ती है।

  • Stack Memory Allocation: यह मेमोरी का वह क्षेत्र होता है जहाँ स्थिर मेमोरी आवंटन किया जाता है। यह डेटा को एक स्टैक की तरह व्यवस्थित करता है, और प्रोग्राम के अंत में इसे स्वतः मुक्त कर दिया जाता है।

Important Functions Used in Memory Allocation in C++ in Hindi | मेमोरी आवंटन में उपयोग की जाने वाली प्रमुख फंक्शन्स :

C/C++ में उपयोग की जाने वाली मेमोरी आवंटन फंक्शन्स:

malloc(): यह फंक्शन गतिक रूप से एक ब्लॉक मेमोरी आवंटित करता है और उसे पॉइंटर के रूप में लौटाता है।

int *ptr = (int*) malloc(5 * sizeof(int));
calloc(): यह फंक्शन गतिक रूप से एक ब्लॉक मेमोरी आवंटित करता है और उसे शून्य से प्रारंभ करता है।

int *ptr = (int*) calloc(5, sizeof(int));
realloc(): यह पहले से आवंटित मेमोरी को फिर से आकार देता है।

ptr = realloc(ptr, 10 * sizeof(int));
free(): यह आवंटित मेमोरी को मुक्त करता है।

free(ptr);