Static Memory Allocation
Static Memory Allocation Compile-Time पर Variable के लिए Memory Reserve (Allocate) करने की Process है। C में, Static Variable को “static” Keyword का use करके Declare किया जाता है, जो Compiler को Program के पूरे Lifetime के दौरान Variable के लिए Memory Allocation करने का Instructs देता है। Static Variable के लिए Memory को एक Special Region में Allocate किया जाता है, जिसे Program की Memory के “Data Segment” के रूप में जाना जाता है।
Static Memory Allocation में जब भी Program Execute होता है| तो वह उस Size को Fix कर देता है, जो Program Use करने वाला है, और इसे आगे Change नहीं किया जा सकता है। Memory Allocation और Deallocation Compiler द्वारा Automatically रूप से किया जाता है।। जब Memory Allocation, Compiler Time (या) Run Time से पहले किया जाता है, तो इसे Static Memory Allocation कहा जाता है।
Key Features
- Memory Allocation और Deallocation Compiler द्वारा किया जाता है।
- यह Static Memory Allocation के लिए Stack Data Structures का use करता है।
- Variables Permanently रूप से Allocated किए जाते हैं।
- Execution, Dynamic Memory Allocation से Fast होता है।
- Memory Runtime से पहले Allocate की जाती है।
Example
Output
Advantages of Static Memory Allocation
- Faster Access: Static Memory Allocation का Access Time Fast होता है, क्योंकि Memory Compile-Time के दौरान Reserved होती है, जोकि Runtime Overhead से Prevent करती है।
- Persistent Values: Variable Function Call में अपने Value बनाए रखते हैं, जिससे यह Multiple Call में State Maitain रखने के लिए use हो जाता है।
Disadvantages of Static Memory Allocation
- Limited Flexibility: Static Variable के लिए Memory का Size Compile-Time पर Fix किया जाता है| और Runtime के दौरान इसे Change नहीं जा सकता है, यदि कुशलतापूर्वक उपयोग नहीं किया जाता है, तो संभावित रूप से Memory Wastage हो सकती है।
- Not Thread-Safe: Shared Memory Access के कारण Static Variable, Multi-Threaded Environment में Issues Generate कर सकते हैं।
Dynamic Memory Allocation
Dynamic Memory Allocation, Program को Runtime के दौरान Memory Allocate करने की Permission देता है| जो Specialy तब use होता है, जब Memory Requirement, Unknown होती हैं| C Programming, Dynamic Memory Management के लिए Malloc, Calloc, Realloc और (stdlib.h) Library से Built-in Function Provide करता है।
Dynamic Memory Allocation में Size का Initialization और Allocation, Programmer द्वारा किया जाता है। यह Pointers के साथ Manage और Serve किया जाता है, जो उस Area में नए Allocated Memory Space को Point करता है| जिसे Heap कहते हैं। Heap Memory, Unorganized होती है, और इसे एक Resource के रूप में माना जाता है| जब Memory Allocation, Run Time या Execution Time के दौरान किया जाता है, तो इसे Dynamic Memory Allocation के रूप में जाना जाता है।
Key Features
- Requirement के अनुसार Memory Size को फिर से Allocate/Deallocate भी कर सकते हैं।
- Dynamic Allocation, Run Time पर किया जाता है।
- इसमें Memory का Wastage कम होता है|
Function used for Dynamic Memory Allocation
Stdlib.h Header File में कुछ Function उपलब्ध हैं, जिनका उपयोग Memory को Dynamic रूप से Allocate करने के लिए किया जाता है| जोकि निम्नलिखित है –
- Malloc() Function
- Calloc() Function
- Realloc() Function
Malloc() Function
malloc () Function का use Program Execution के दौरान Dynamically Memory Allocate करने के लिए किया जाता है | malloc () Function की मदद से Allocate की गई Dynamically Memory में By Default Garbage Value Stored होती है| जब malloc() Function Required Memory Allocate नहीं कर पता है, तब यह NULL Pointer Return करता है |
Syntax
Example
Output
Calloc() Function
calloc() Function के द्वारा Memory के Multiple Blocks, Dynamically Allocate कर सकते है | इसका use Array और Structure जैसे Complex Data Structures को Memory Allocate करने के लिए किया जाता है | यह malloc() Function की ही तरह Dynamically Memory Allocate करता है, मगर calloc() का use Memory Space की Multiple Block Allocate करने के लिए किया जाता है, और malloc() का use Memory Space का Signal Block Allocate करने के लिए किया जाता है |
malloc() function के द्वारा Created Dynamically Memory में By Default Garbage Value है, जबकि calloc() के द्वारा Created Dynamically Memory में By Default शून्य Initialize होता है | यदि calloc() Function की मदद से Dynamic Memory Allocate करते समय Memory में पर्याप्त Space न हो तो यह Null Return करता है |
Syntax
Example
Output
realloc() function
malloc() or calloc() के द्वारा Created Dynamically Memory के Size को बदलने के लिए realloc() का use किया जाता है | realloc() Function के द्वारा आसानी से Dynamically Memory के size में बदलाव कर सकते है |
Syntax
Example
Output
Advantages of Dynamic Memory Allocation
- Flexible Memory Usage: Runtime के दौरान आवश्यकतानुसार Memory Allocate की जाती है, जिससे Efficient रूप Usage करने की Permission मिलती है, और Wastages Reduce होता है।
- Scalability: Dynamic Memory Allocation Linked Lists, Trees और Dynamic Arrays जैसी Data Structures के Build करने की सुविधा Provide करता है।
- Better Thread Safety: चूंकि प्रत्येक Thread की अपनी Dynamically रूप से Allocated Memory हो सकती है, यह Multi-Threaded Environment में Data Corruption की संभावना को कम कर देता है।
Disadvantages of Dynamic Memory Allocation
- Slower Access: Dynamic Memory Allocation में Runtime Overhead शामिल होता है, जो इसे Static Memory Allocation की तुलना में Slow बनाता है।
- Potential Memory Leaks: यदि Free Space का use करके Memory को ठीक से Allocate नहीं किया जाता है, तो इससे Memory Leaks हो सकती है| और Program समय के साथ अत्यधिक Memory Consume कर सकता है।