In 'C' language, there are two types of memory allocation available for a variable or an array -
सी लैंग्वेज में किसी वेरिएबल या अरे हेतु मेमोरी का एलोकेशन निम्न दो प्रकार से किया जा सकता है -
1.) Static memory allocation (स्टेटिक मेमोरी एलोकेशन):-
If we will provide memory bytes to a variable or an array at compile time, then it is called static memory allocation. In this type of memory allocation, user can't allow to modify the size of a variable or an array at run time. Hence, computer memory is not used effectively. To solve this problem, we can provide memory bytes to any variable or array at run time.
यदि हम किसी वेरिएबल या अरे को कंपाइल टाइम पर मेमोरी बाइट उपलब्ध कराते है तब इसे स्टेटिक मेमोरी एलोकेशन कहा जता है। इस प्रकार के एलोकेशन में यूजर वेरिएबल या अरे के साइज़ में रन टाइम पर परिवर्तन नहीं कर सकता है जिससे मेमोरी का प्रभावी उपयोग नहीं हो पाता है। इस समस्या के हल के लिए रन टाइम पर मेमोरी का एलोकेशन किया जाता है।
Example :-
int a;
float list[5];
2.) Dynamic memory allocation:-
If we will provide memory bytes to a variable or an array at run time, then it is called dynamic memory. In this type of memory allocation, user can allow to modify the size of a variable or an array at run time. Hence, computer memory is used effectively. In 'C' language, functions of alloc.h header file are used for dynamic memory allocation. Generally following functions are used for dynamic memory allocation -
यदि हम किसी वेरिएबल या अरे को रन टाइम पर मेमोरी बाइट उपलब्ध कराते है तब इसे डायनामिक मेमोरी एलोकेशन कहा जता है। इस प्रकार के एलोकेशन में यूजर वेरिएबल या अरे के साइज़ में रन टाइम पर परिवर्तन कर सकता है जिससे मेमोरी का प्रभावी उपयोग होता है। इस हेतु सी लैंग्वेज प्रोग्राम में alloc.h हैडर file को जोड़ा जाता है। सामान्यत: डायनामिक मेमोरी एलोकेशन के लिए निम्न फंक्शन का प्रयोग किया जाता है-
a.) malloc():- By the use of this function, memory bytes are allocated at run time. If malloc() is successfully executed then it will return memory address to pointer otherwise return NULL value.
यह फंक्शन रन टाइम पर मेमोरी बाइट प्रदान करता है। malloc() के सफलतापूर्वक रन होने पर एलोकेट की गयी मेमोरी बाइट का प्रथम एड्रेस पॉइंटर को प्रदान किया जाता है अन्यथा नल वैल्यू रिटर्न की जाती है।
Syntax :-
void* malloc (size_t size);
Example :-
int* p;
p= (int *)malloc(40);
b.) calloc():- By the use of this function, block of memory bytes are allocated at the run time. If calloc() is successfully executed then it will return memory address to pointer otherwise return NULL value.
यह फंक्शन रन टाइम पर मेमोरी बाइट के ब्लॉक प्रदान करता है। calloc() के सफलतापूर्वक रन होने पर एलोकेट की गयी मेमोरी बाइट का प्रथम एड्रेस पॉइंटर को प्रदान किया जाता है अन्यथा नल वैल्यू रिटर्न की जाती है।
c.) realloc():-
The realloc() function is used to resize allocated memory without losing old data.
यह फंक्शन बिना किसी पुराने डाटा को बदले, रन टाइम पर प्रदान की गयी मेमोरी बाइट के आकार में परिवर्तन कर सकता है।
Syntax:-
void *realloc(void *ptr, size_t newsize);
float*p;
p=(float*) realloc (p, 40);
d.) free():- By the use of this function allocated memory byte from malloc () and calloc () are freed and again added in free memory pool or heap at run time. It is responsibility of programmer to free the allocated memory bytes otherwise this work will be done by garbage collector, a system program of operating system as per schedule.
यह फंक्शन, malloc(), calloc() द्वारा प्रदान की गयी मेमोरी बाइट को पुन: फ्री मेमोरी पूल या हीप में जोड़ने का कार्य करता है। यह प्रोग्रामर की जिम्मेदारी है की वह कार्य पूर्ण हो जाने के पश्चात् मेमोरी को फ्री करे अन्यथा यह कार्य समय - समय पर ऑपरेटिंग सिस्टम के सिस्टम प्रोग्राम गार्बेज कलेक्टर द्वारा किया जाता है।
Syntax :-
void free (void* pointer);
Example :-
float*p;
p=(float*) calloc (4, 100 );
-----------
-----------
statements;
free (p);
C program for dynamic memory allocation -
#include<stdio.h>
# include<conio.h>
#include<string.h>
#include<alloc.h>
void main(){
char *str;
str=(char*)malloc(20*sizeof(char));
printf("enter a string\n");
gets(str);
printf("String is=");
puts(str);
free(str);
getch( );
}
No comments:
Post a Comment