Introduction
जब हमें एक से अधिक Record को store करने होते हैं तो Array का प्रयोग किया जाता हैं। किन्तु एरे का प्रयोग तभी उपयुक्त है जब यह पहले से पता हो कि उसमें कितने Record store किए जाने हैं। ऐसी स्थिति में जब प्रोग्राम के रन होने से पूर्व यह पता लगाना संभव नहीं हो कि कुल कितने Record स्टोर किए जाने है, तो Dynamic Memory Allocation(डायनेमिक मैमोरी एलोकेशन) का प्रयोग किया जाता है।
For Example एक Company Employees को higher करने के लिए Interview रखती है, किन्तु उसे यह पता नहीं होता है कि कितने व्यक्ति Interview के लिए आएंगे। उन व्यक्तियों की information को स्टोर करने के लिए Array प्रयोग में लिया जा सकता है। ऐसे में Array का बड़ा आकार लेने में हो सकता है कि कम व्यक्ति ही Interview के लिए उपस्थित हो। इससे मैमोरी अधिक खर्च होगी। दूसरी ओर यदि Array का छोटा आकार लिया जाए तो हो सकता है कि कुछ व्यक्तियों से सबंधित Information स्टोर ही नहीं हो पाए।
इस समस्या का समाधान करने के लिए कुछ ऐसा किया जा सकता है कि Array का प्रयोग करने की बजाए जैसे ही नया रिकॉर्ड स्टोर करना हो वैसे ही केवल उसी Record को स्टोर करने के लिए Memory प्रयोग की जाए। इसे Dynamic Memory Allocation(डायनेमिक मैमोरी एलोकेशन) कहा जाता है।
Dynamic Memory Allocation in C Language
सामान्य Programs में सभी variables Program के प्रारंभ में ही Declare कर निश्चित मैमोरी को Allocate कर लिया जाता है। यह Static Memory Allocation(स्टेटिक मैमोरी एलोकेशन) कहलाता है। जबकि Dynamic Memory Allocation(डायनेमिक मैमोरी एलोकेशन) में Program के Run होने के दौरान जब ज़रूरत होती है, उसी समय आवश्यकतानुसार मैमोरी को Allocate कर प्रयोग में लिया जाता है। लिंक लिस्ट के बारे में विस्तार से जानने से पूर्व यह जानना आवश्यक है कि C Language में Dynamic Memory किस प्रकार Allocate कर प्रयोग की जाती है।
Important Function for Dynamic Memory Allocation
Memory (मैमोरी) को Program के Run होने के दौरान Allocate करने तथा आवश्यकता समाप्त होने पर उसे वापस Free करने के लिए C languages में निम्न फंक्शनों का प्रयोग किया जाता है:-
malloc(....) | इस Function को Allocate करवाने वाली Memory की Size bytes में बताना होता है। यह बताई गई मैमोरी को Operation System (ऑपरेटिंग सिस्टम) से मांग कर उसे Allocate कर लेता है तथा Allocate Memory की Location का Address (पॉइंटर) return करता है। |
calloc(....) | Array के लिए Memory Allocate करता है। इस Function को Allocate करवाने वाले Array तथा Array के प्रत्येक Elements द्वारा घेरे जाने वाली मैमोरी (बाइट्स में) बतानी होती है। |
realloc(....) | पहले से Allocate की हुई Memory का Size increment या Decrement करने के लिए के इसका प्रयोग किया जाता है। मैमोरी में पहले से store Data को बचाते हुए यह Function नई Location का Address Return करता है, तथा Old Location को Free कर देता है। |
free(....) | इसे एक Pointer (पॉइंटर) Input में दिया जाता है। यह उस Pointer (पॉइंटर) की Memory को free करते हुए वापस Operation System (ऑपरेटिंग सिस्टम) को लौटा देता है, ताकि अन्य प्रोग्राम उस मैमोरी का use कर सके। |
Program के Run होने के दौरान Memory Allocate करवाने के लिए malloc() का प्रयोग किया जाता है। इसका प्रारूप निम्न प्रकार है:
pointer_variable = (type cast)malloc(size in bytes);
........malloc (size in bytes):-
Data को स्टोर करने के लिए हमें जितने Bytes की आवश्यकता होती है वह हमें इस फंक्शन को इनपुट में देनी होती है। यह फंक्शन मांगी गई Bytes को Allocate करते हुए उसके प्रथम मैमोरी का Address (पॉइंटर) Return करता है। चूंकि जब भी पॉइंटर का प्रयोग किया जाता है तो यह भी बताना होता है कि वह Pointer किस Data Type को point (पॉइंट) कर रहा है। यह कार्य Type coasting (टाइप कास्टिंग) के माध्यम से निम्न प्रकार किया जाता है:
(datatype *)malloc(size in bytes);
उपरोक्त उदाहरण में मैमोरी में 2 bytes Allocate करते हुए एक Pointer (पॉइंटर) Return (रिटर्न) होगा, जो किसी भी Data-type (डेटा टाइप) को point (पॉइंट) पॉइंट करते हुए नहीं होगा, किंतु (int *) के माध्यम से वह Data-type (डेटा टाइप) को point (पॉइंट) अब int Data-type (डेटा टाइप) को point (पॉइंट) करने वाले Pointer (पॉइंटर) में बदल जाएगा। अतः इस Integer Pointer (इंटीजर पॉइंटर) को स्टोर करने के लिए हमने pi पॉइंटर प्रयोग किया है। संपूर्ण रूप से यह कहा जा सकता है कि उपरोक्त उदाहरण में 2 byte Integer को स्टोर करने के लिए Memory Allocate की जा रही है। अब इस Pointer pi के माध्यम से मैमोरी में एक Integer Value स्टोर करवाई जा सकती है।
Example:-
Output:-
5282
248.523000
Explain Example:-
उपरोक्त उदाहरण में एक Integer तथा एक Float value को Store करवाने के लिए malloc() का प्रयोग किया गया है। इस Function में sizeof (...) Operator स्वतः संबंधित Data type (डेटा टाइप) द्वारा घेरे जाने वाली space बता देगा।
For Example:-
उपरोक्त उदाहरण में 5 Integer Value को स्टोर करवाने के लिए Memory(मैमोरी) Allocation (एलोकेशन) किया गया है।
free up memory
जब भी किसी Variable (वेरिएबल) के लिए Memory (मैमोरी) Allocation (एलोकेशन) होती है तो वह संबंधित Block या Program की समाप्ति पर ही free होती है। अर्थात् उस Time Duration में उस मैमोरी का प्रयोग कोई अन्य Program नहीं कर सकता है। ऐसे Variable (वेरिएबल) जिनकी हमें Program में आगे आवश्यकता नहीं हो, उसको Free कर दिया जाना चाहिए। Memory(मैमोरी) को free करने के लिए free (...) फंक्शन प्रयोग किया जाता है, जिसका प्रारूप निम्न प्रकार है:
free(pointer_variable) ;
उपरोक्त प्रारूप में pointer_variable उस मैमोरी स्थान को Denote करता है, जिसे Free किया जाना हैं।
उपरोक्त उदाहरण में free(pi) 5 Integer Number द्वारा घेरे जाने वाली Memory को Free कर देगा।
Example:-
Output:-
Enter Emloyee Name : Muksa
Enter Emloyee Age : 20
Name : Muksa
Age : 20
उपरोक्त उदाहरण में चूंकि Structure (स्ट्रक्चर) Member को Pointer के माध्यम से प्रयोग किया जा रहा है.. अतः dot(.) की जगह पर (->) का प्रयोग किया गया है।
0 Comments