DMA(dynamic memory allocation) in c Hindi | malloc(),calloc(),realloc(),free()

 हेलो दोस्तों !

आज की इस DMA(dynamic memory allocation) in c Hindi | malloc(),calloc(),realloc(),free() पोस्ट में हम dynamic मेमोरी एलोकेशन के बारे में चर्चा करेंगे। और malloc() ,calloc() ,realloc() तथा free() function के बारे में भी चर्चा करेंगे। 

इस पोस्ट के मुख्य विषय :-

  1. DMA या  डायनामिक मेमोरी एलोकेशन क्या है ?
  2. डायनामिक मेमोरी एलोकेशन का यूज़ क्यों किया जाता है ?
  3. malloc() फंक्शन क्या है ?
  4. malloc() फंक्शन का प्रोग्राम। 
  5. calloc() फंक्शन क्या होता है ?
  6. calloc() फंक्शन का प्रोग्राम। 
  7. realloc() फंक्शन क्या होता है ?
  8. realloc() फंक्शन का प्रोग्राम। 
  9. free() फंक्शन क्या होता है ?
  10. free() फंक्शन का प्रोग्राम। 

1 . DMA या dynamic memory allocation क्या है :-

तो दोस्तों सबसे पहले dynamic memory allocation के बारे में जान लेते है कि डायनामिक मेमोरी एलोकेशन क्या होता है। 

dynamic memory allocation in c programming hindi

डायनामिक मेमोरी एलोकेशन सी प्रोग्रामिंग में यूज़ होने वाली एक ऐसी सुविधा है जिसका यूज़ कर हम dynamically मेमोरी को किसी वेरिएबल में allocate करा सकते है। इसका मतलब है कि हम प्रोग्राम के execution के समय ही मेमोरी को किसी वेरिएबल में allocate करते है। 

डायनामिक मेमोरी को हम किसी पॉइटर वेरिएबल के द्वारा पॉइंट करते है या पॉइंटर वेरिएबल में dynamically प्रोवाइड की गई मेमोरी को स्टोर कर लेते है। और फिर हम उसी पॉइंटर वेरिएबल की मदद से हम उस मेमोरी को एक्सेस कर सकते है। डायनामिक मेमोरी को हम केवल पॉइंटर वेरिएबल में स्टोर या पॉइंट करा सकते है। क्योकि dynamically प्रोवाइड की गई मेमोरी का कोई डाटा टाइप नहीं होता है वह केवल bytes के रूप में मेमोरी प्रोवाइड होती है। 

जब भी हमें डायनामिक मेमोरी की जरुरत होती है तो हम किसी डाटा टाइप के पॉइंटर में उस मेमोरी को स्टोर या पॉइंट करा देते है। डायनामिक मेमोरी हमेशा वॉइड टाइप में मेमोरी allocate करता है। जिसका यूज़ हम टाइप कास्ट करके कर सकते है। 

डायनामिक मेमोरी कितनी हमें चाहिए यह सिस्टम को कंपाइलेशन के समय पता नहीं चलता है। जब प्रोग्राम रन होता तभी सिस्टम को पता चलता है की प्रोग्राम को कितनी मेमोरी प्रोवाइड करनी है। डायनामिक मेमोरी में स्टोर की गई वैल्यूज  को हम बड़ी तेजी से एक्सेस कर सकते है। 

2. DMA या dynamic memory allocation का यूज़ क्यों किया जाता है :-

तो दोस्तों अब हम यह जान लेते है की हमें डायनामिक मेमोरी की आवश्यकता क्यों पड़ती है हमें इसका यूज़ क्यों करना चाहिए। 

दोस्तों सबसे पहला कारण तो यह है कि डायनामिक मेमोरी को हम बड़ी तेजी से एक्सेस कर सकते है। स्टैटिक मेमोरी की अपेक्षा। जब भी हमें कभी ऐसे प्रोग्राम बनाने होते है जिसमे मेमोरी में स्टोर वैल्यूज को तेजी से एक्सेस की जरुरत होती है तो हमें हमेशा ही डायनामिक मेमोरी का यूज़ करना चाहिए। 

स्टैटिक मेमोरी का यूज़ सभी जगह उचित नहीं होता है क्योकि इसे अगर हमने एक बार डिफाइन कर दिए है तो हम इस मेमोरी को रन टाइम में चेंज नहीं कर सकते है क्योकि इस मेमोरी को कंपाइलेशन के समय ही डिफाइन कर दिया जाता है। कम्पाइलर सिस्टम को पहले ही बता देता है की इतनी मेमोरी इस वेरिएबल को रन टाइम में देनी है। 

डायनामिक मेमोरी एलोकेशन का यह फायदा है कि हम मेमोरी को रन टाइम पर ही लेते है। तो हमें यह सोचने की जरूरत नहीं होती है कि यह मेमोरी कम है या ज्यादा है। क्योकि हम उसी समय यूजर से पूछ कर उतनी मेमोरी सिस्टम से लेते है। जबकि यह काम स्टैटिक मेमोरी एलोकेशन से संभव नहीं होता है। 

तो दोस्तों अब हमें लगता है कि आप डायनामिक मेमोरी का यूज़ क्यों करना चाहिए जान गए होंगे। तो अब आप भी जब जरुरत हो डायनामिक मेमोरी एलोकेशन कि तो आप भी इसी मेमोरी का यूज़ करें। 

3. malloc() function क्या है :-

तो दोस्तों अब हम malloc() function के बारे में जान लेते हैकि malloc फंक्शन क्या होता है ?

जब भी हमें डायनामिक मेमोरी की आवश्यकता होती है तो हम malloc फंक्शन की मदद से डायनामिक मेमोरी को सिस्टम से लेते है। यह काम रन टाइम पर होता है। malloc फंक्शन को हम केवल साइज़ बता देते है कि हमें इतनी मेमोरी चाहिए। और malloc फंक्शन हमें उतनी मेमोरी रन टाइम पर प्रोवाइड करा देता है। 

malloc फंक्शन के द्वारा प्रोवाइड कि गई मेमोरी में by डिफ़ॉल्ट गार्वेज वैल्यू होती है। malloc फंक्शन हमें उतनी bytes की मेमोरी प्रोवाइड करता है जितनी हमने मांगी थी। इस मेमोरी का यूज़ हम किसी डाटा टाइप में टाइप कास्ट करके करते है। क्योकि malloc फंक्शन वॉइड मेमोरी हमें देता है जिसका कोई डाटा टाइप नहीं होता है। 

malloc फंक्शन केवल एक ब्लॉक के रूप में मेमोरी प्रोवाइड करता है। इसका मतलब है की जितनी मेमोरी हमें चाहिए हम उतनी मेमोरी के एक ब्लॉक को लेते है। हमें malloc फंक्शन उतनी बाइट का मेमोरी ब्लॉक प्रोवाइड करता है। 

syntax  of malloc function :- 

ptr = (cast_type *) malloc (byte_size);

example :- ptr=(int *)malloc(5);

यहाँ आप एक्साम्पल में देख सकते है की जो ptr है वह एक int टाइप का पॉइंटर है। और जो मेमोरी malloc फंक्शन return करेगा उसे हम int टाइप में कास्ट कर लेते है। जहा 5 लिखा है वह साइज है जो हम malloc फंक्शन की मदद से dynamically ले रहे है। 

4. malloc() function का program :-

दोस्तों अब हम malloc function का एक प्रोग्राम देख लेते है। ताकि हम malloc फंक्शन को अच्छी तरह समझ सके। 

program of malloc function :-

#include< stdio.h >
#include< stdlib.h >
void main()
{
    printf("\n***Use of malloc function***\n");
    int *a,*b,*c;
    a=(int *)malloc(sizeof(int));
    b=(int *)malloc(sizeof(int));
    c=(int *)malloc(sizeof(int));
    printf("Enter first number:");
    scanf("%d",&*a);
    printf("Enter second number:");
    scanf("%d",&*b);
    *c=*a+*b;
    printf("sum of a and b is:%d\n",*c);
}

5. calloc function क्या होता है :-

दोस्तों अब हम calloc function के बारे में जान लेते है कि calloc फंक्शन क्या होता है ?

calloc फंक्शन का यूज़ भी हम डायनामिक मेमोरी एलोकेशन के लिए यूज़ करते है लेकिन यह malloc से थोड़ा अलग कार्य करता है। यह में कई सारे मेमोरी ब्लॉक एक ही साइज के प्रोवाइड करता है। इसकी मदद से हम बहुत सारे मेमोरी ब्लॉक एक ही साइज के ले सकते है। जोकि बिल्कुल ऐरे कि तरह होता है। 

हम यह कह सकते है की calloc का यूज़ हम डायनामिक ऐरे के लिए करते है क्योकि यह ऐरे के लिए ही बनाया गया है। जब भी हमें डायनामिक ऐरे की आवश्यकता होती है तो हम हमेशा calloc फंक्शन का यूज़ करते है। हम  इसी की मदद से डायनामिक ऐरे बना सकते है। अगर हम यह कहे की डायनामिक ऐरे के लिए ही calloc फंक्शन को बनाया गया है तो यह गलत नहीं होगा। 

syntax of calloc function :-

ptr = (cast_type *) calloc (n,size);

सिंटेक्स में आप देख सकते है कि ptr एक पॉइंटर है और cast _type वह टाइप है जिस टाइप में हम इस मेमोरी ब्लॉक को कास्ट करना चाहते है। n ,वह नंबर है जितने हमें ब्लॉक चाहिए। साइज वह साइज है जितने साइज के हमें ब्लॉक चाहिए। 

example :-  ptr =(int *)calloc (5 ,2 );

6. calloc() function का program :-

दोस्तों अब हम calloc function का एक प्रोग्राम देख लेते है। किसी प्रकार calloc फंक्शन का यूज़ किया जाता है।

program of calloc function :- 


#include< stdio.h >
#include< stdlib.h >
void main()
{
    int *temp,*ptr;
    printf("\n***Use of calloc function***\n");
    ptr=(int *)calloc(5,2);
    for(int i=0;i < 5;i++)
    {
        printf("Enter the number %d:",i);
        scanf("%d",&*ptr+i);
    }
    for(int j=0;j < 5;j++)
    {
        temp=ptr+j;
        printf("%d\t",*temp);
    }
}

7. realloc() function क्या होता है :-

दोस्तों अब हम realloc function के बारे में जान लेते है कि realloc फंक्शन क्या होता है ?

realloc फंक्शन वह फंक्शन होता है जो malloc तथा calloc के द्वारा प्रोवाइड कि गई मेमोरी को दुबारा से allocate करने में यूज़ किया जाता है। इसकी मदद से हम डायनामिक मेमोरी को दुबारा से reallocte करते है। इस फंक्शन को मेमोरी को दुबारा allocate करने के लिए बनाया गया है। 

realloc फंक्शन केवल उसी मेमोरी को reallocate करता है जो malloc या calloc द्वारा प्रोवाइड की गई है क्योकि यह एक डायनामिक मेमोरी एलोकेशन फंक्शन है और यह केवल डायनामिक मेमोरी को ही reallocate कर सकता है। जब भी हमें दुबारा मेमोरी reallocate करने की जरुरत पड़ती है तो हम realloc फंक्शन का ही यूज़ करते है। 

syntax of realloc function :-

ptr = realloc (ptr ,newsize);

सिंटेक्स में आप देख सकते है जहा ptr है वह एक पॉइंटर है। और realloc फंक्शन के अंदर लिखा ptr पुराना साइज है जिसको अब न्यू साइज में बदलना है। newsize वह साइज है जिसमे आपको नया साइज देना है। 

example :- ptr =realloc (ptr ,10 );

8. realloc() function का program :-

दोस्तों अब हम realloc function के  program  को देख लेते है। 

program of realloc function :-

#include< stdio.h >
#include< stdlib.h >
void main()
{
    int *ptr,*ptr1;
    printf("\n***Use of realloc function***\n");
    ptr=(int *)malloc(sizeof(2));
    printf("Enter the long number:");
    scanf("%d",&*ptr);
    printf("\nThis number you enter:%d\n",*ptr);
    ptr1=(int *)realloc(ptr,4);
    printf("Enter the long number:");
    scanf("%d",&*ptr1);
    printf("\nThis number you enter:%d\n",*ptr1);
}

9. free() function क्या है :-

तो दोस्तों अब हम डायनामिक मेमोरी एलोकेशन के free function के बारे मे जान लेते है कि यह क्या होता है ?

फ्री फंक्शन एक बहुत ही महत्तपूर्ण फंक्शन होता है जो की मेमोरी को waste होने से बचता है। फ्री फंक्शन malloc तथा calloc फंक्शन के द्वारा allocate की गई मेमोरी को फ्री करने का काम करता है। जो की बहुत ही महत्वपूर्ण कार्य होता है। क्योकि अगर हम malloc तथा calloc के द्वारा allocate की मेमोरी को फ्री नहीं करते है तो वह मेमोरी अपने से फ्री नहीं होती है जिससे मेमोरी फुल होती है। 

malloc तथा calloc फंक्शन का यूज़ करते समय यह ध्यान हमेशा रखे कि मेमोरी को फ्री फंक्शन की मदद से फ्री कर दे। फ्री फंक्शन का मुख्य कार्य डायनामिक मेमोरी को फ्री करना होता है जो malloc तथा calloc फंक्शन के द्वारा allocate की जाती है। 

इसका यूज़ बहुत ही आसान होता है। हम केवल फ्री तथा उस मेमोरी को पॉइंट करने वाले पॉइंटर को लिख कर डायनामिक मेमोरी को रिलीज़ करा सकते है। जो की एक बहुत ही अच्छी आदत मानी जाती है। एक प्रोग्रामर को सी प्रोग्राम्स बनाते समय डायनामिक मेमोरी का यूज़ बड़ी ही सावधानी से करना पड़ता है। 

syntax of free function :-

free(memory_address);

example :- free(ptr);

आप सिंटेक्स तथा एक्साम्पल में देख सकते है की किस प्रकार हमने फ्री फंक्शन का यूज़ किया है। यहाँ ptr वह मेमोरी एड्रेस है जो malloc या calloc द्वारा allocate की गई है। जिसको हम फ्री फंक्शन की मदद से फ्री कर रहे है। 

10. free() function का program :-

दोस्तों अब हम free function का भी एक प्रोग्राम देख लेते है कि किस प्रकार फ्री फंक्शन का यूज़ किया जाता है। 

program of free function :-

#include< stdio.h >
#include< stdlib.h >
void main()
{
    int *ptr;
    printf("\n***Use of realloc function***\n");
    ptr=(int *)malloc(sizeof(2));
    printf("Enter the long number:");
    scanf("%d",&*ptr);
    printf("\nThis number you enter:%d\n",*ptr);
    free(ptr);
    printf("Memory is released\n");
    printf("After memory released ptr value:%d",ptr);
}
इन पोस्ट को भी पढ़े :-

author :-

तो दोस्तों आज की हमारी यह DMA(dynamic memory allocation) in c Hindi malloc(),calloc(),realloc(),free() पोस्ट ख़त्म होती है। हम आशा करते है कि हमारी यह पास आपको जरूर पसंद आई होगी। और आप डायनामिक मेमोरी एलोकेशन को अच्छी तरह समझ गए होंगे। अगर आपको इस पोस्ट में कोई कमी लगती है तो हमें कमेंट करके जरूर बताये। धन्यवाद !






Post a Comment

0 Comments