Data Structures in Hindi : Dynamic Memory Allocation

Dynamic Memory Allocation

  • Introduction to Dynamic memory allocation in Hindi
  • Dynamic memory allocation functions in Hindi
  • Example of dynamic memory allocation in Hindi

Introduction to Memory Allocations

जब आप किसी program को compile करते है तो compiler द्वारा उस program में declare किये गए सभी variables को memory allocate की जाती है। इस memory में वे values store की जाती है जो आप variables को assign करते है। 

हर variable को allocate की गयी memory location का एक address होता है जो पूरी memory में उस location को ढूँढने में सहायक होता है। जब program run होता है तो memory addresses के द्वारा ही variables की values को access किया जाता है। 

उदाहरण के लिए आपने program में एक integer variable age create किया है। इस variable को आपने 35 value assign की है। जब आप program को compile करेंगे तो compiler age variable को memory allot करेगा और उसमें 35 value को store करेगा। 

Compiler द्वारा age variable को allocate की गयी memory का address कुछ भी हो सकता है। इस address को compiler symbol table में manage करता है। यह address बाद में उस variable की value को access करने के लिए प्रयोग किया जाता है। 

इस तरह से किया गया memory allocation static memory allocation कहलाता है। Static memory allocation में program के run होने से पूर्व (compile time पर) ही memory allocate कर दी जाती है।

इस प्रकार से allocate की गयी memory तब तक allocated रहती है जब तक की program terminate नहीं हो जाता है। इस बीच यदि आप किसी नए variable को memory allocate करना चाहते है या किसी पुराने variable को allocate की गयी memory को free करना चाहते है तो ऐसा आप नहीं कर सकते है।

Static memory allocation के द्वारा memory का सही utilization नहीं हो पाता है क्योंकि ऐसे कई variables होते है जो सिर्फ program की शुरआत में ही काम आते है इसके बाद वो सिर्फ memory को रोक कर रखते है ऐसे variables को free करने से दूसरे नए variables के लिए memory available हो सकती है।

यदि data structures के सन्दर्भ में बात की जाए तो static memory allocation के द्वारा जब आप data structure create करते है तो आपको size पहले से define करनी पड़ती है। उदाहरण के लिए यदि आप कोई array (data structure) create करेंगे तो उसकी size आपको पहले से बतानी होगी।

ऐसे में क्योंकि memory की size fix होती है इसलिए array के साथ sorting और insertion (नए elements add करना) जैसे operations perform नहीं किये जा सकते है। इन operations के लिए अतिरिक्त memory की आवश्यकता होती है।

इस situation के solution के रूप में आपको dynamic memory allocation mechanism provide किया गया है। Dynamic memory allocation के द्वारा runtime पर memory allocate और deallocate की जा सकती है। इस mechanism के द्वारा data structures को run time पर आवश्यक्तानुसार increase और decrease किया जा सकता है।

Dynamic memory allocation को manual memory allocation भी कहा जाता है। क्योंकि इसमें memory को allocate और free करने का कार्य programmer द्वारा खुद किया जाता है।

Dynamic Memory Allocation Functions

C language में dynamic memory allocation perform करने के लिए कुछ functions use किये जाते है। इन functions के बारे में निचे बताया जा रहा है।

sizeof()

C language में sizeof() function द्वारा आप किसी भी variable, data type या array की size (bytes के रूप में ) जान सकते है। जब आप इस function में argument pass करते है तो यह function उस pass किये गए argument की size return करता है। 

उदाहरण के लिए आप किसी int variable age की size पता करना चाहते है तो ऐसा आप इस प्रकार करेंगे। 

sizeof(age); 

मुख्यतः इस function का प्रयोग किसी data structure की size पता करने के लिए किया जाता है।

malloc()

इस function का प्रयोग memory allocate करने के लिए किया जाता है। इस function में argument के रूप में size pass की जाती है। यह function specify की गयी size जितनी memory allocate करता है और उस memory space के starting address को किसी pointer variable में store करता है।

C language में malloc() function को use करने का general syntax निचे दिया जा रहा है।

pntr-variable = (cast-data-type*) malloc(size);

ऊपर दिए गए syntax में cast data type pointer variable का data type होता है। इसे malloc द्वारा allocate किये गए memory space को data type pointer में cast करने के लिए प्रयोग किया जाता है।

calloc()

C language में calloc() function का प्रयोग memory के multiple blocks (या groups) allocate करने के लिए किया जाता है। यह function सभी blocks को zero से initialize करता है और उनका pointer return करता है। 

C language में calloc() function का general syntax निचे दिया जा रहा है। 

pntr-variable = (cast-data-type*) calloc(number-of-blocks, size);

जैसा की आप ऊपर दिए गए syntax में देख सकते है calloc() function में दो arguments pass किये जाते है पहला argument से आप ये specify करते है की आप memory में कितने blocks create करना चाहते है और दूसरे argument से आप यह specify करते है की हर block की size कितनी होगी। 

मुख्यतः calloc() function का प्रयोग array और structure को memory allocate करने के लिए किया जाता है।

free()

Memory के बेहतर उपयोग के लिए आप ऐसी memory को release भी कर सकते है जिसकी आगे कोई आवश्यकता होती है। Allocate की गयी memory को relase करने के लिए C में free() function provide किया गया है। 

C language में free() function का general syntax निचे दिया जा रहा है। 

free(pntr-variable)

जैसा की आप ऊपर दिए गए syntax में देख सकते है इस function में argument के रूप में वह pointer variable pass किया जाता है जिसमें malloc() या calloc() function द्वारा memory pointer return किया गया था। 

realloc()

कई बार आपको allocate की गयी memory की size को change करने की आवश्यकता पड़ सकती है। ऐसा दो कारणों से हो सकता है एक तो जब allocate की गयी memory required size से कम है या फिर allocate की गयी memory required size से अधिक है। 

कारण कोई भी हो allocate की गयी memory की size को change करने के लिए realloc() function use किया जाता है। C language में realloc() function का general syntax निचे दिया जा रहे है। 

ptr = realloc(pntr-variable, new-size);

जैसा की आप ऊपर दिए गए syntax में देख सकते है realloc() function में दो arguments pass किये जाते है। पहला argument वह pointer variable होता है जो allocate की गयी memory का pointer hold करता है। दूसरा argument नयी changed size होती है।

Example of Dynamic Memory Allocation

Dynamic memory allocation के प्रयोग को निचे उदाहरण द्वारा समझाया जा रहा है। 

#include<stdio.h>
#include<stdlib.h>

void main()
{
   int i, *x;

   x = (int*) malloc(10 * sizeof(int));

   for(i=0; i<5;i++)
   {
       printf("Number %d\n",i+1);
       scanf("%d",(x+i));
   }

   for(i=0;i<5;i++)
   {
       printf("%d\n",* (x+i));
   }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

Number 1
Number 2
Number 3
Number 4
Number 5
1
2
3
4
5

      DMCA.com Protection Status

 Leave a comment