सी में स्टेटिक बनाम डायनेमिक मेमोरी आवंटन: अंतर और तुलना

चाबी छीन लेना

  1. स्थिर रूप से आवंटित मेमोरी को संकलन समय पर आवंटित किया जाता है, जबकि गतिशील रूप से आवंटित मेमोरी को रन समय पर आवंटित किया जाता है। यह स्थैतिक आवंटन को तेज़ लेकिन कम लचीला बनाता है।
  2. स्थैतिक आवंटन के लिए मेमोरी स्टैक सेगमेंट से आती है, जबकि डायनेमिक आवंटन हीप सेगमेंट का उपयोग करता है। स्टैक की आकार सीमाएँ हैं लेकिन पहुँच तेज़ है।
  3. स्थिर रूप से आवंटित मेमोरी का एक निश्चित, पूर्व निर्धारित आकार होता है, गतिशील आवंटन निष्पादन के दौरान प्रोग्राम की जरूरतों के अनुसार आवंटित/हटाया जा सकता है।

C में स्टेटिक मेमोरी एलोकेशन क्या है?

सी में स्टेटिक मेमोरी आवंटन प्रोग्राम निष्पादित होने से पहले, संकलन चरण के दौरान चर या डेटा संरचनाओं के लिए मेमोरी आवंटित करने को संदर्भित करता है। स्थैतिक आवंटन का उपयोग करके आवंटित मेमोरी प्रोग्राम के निष्पादन के दौरान स्थिर रहती है और संकलन समय पर निर्धारित होती है। यह गतिशील मेमोरी आवंटन के विपरीत है, जहां मेमोरी को रनटाइम पर मॉलोक() जैसे फ़ंक्शंस का उपयोग करके आवंटित किया जाता है और आवश्यकतानुसार इसका आकार बदला या हटाया जा सकता है।

स्थैतिक मेमोरी आवंटन के कुशल होने का लाभ यह है कि मेमोरी को कंपाइलर द्वारा ही आवंटित और प्रबंधित किया जाता है। हालाँकि, इसकी सीमाएँ हैं, जैसे रनटाइम के दौरान मेमोरी का आकार बदलने में असमर्थता और आवंटित स्थान का पूरी तरह से उपयोग नहीं होने पर मेमोरी की संभावित बर्बादी। यदि सावधानीपूर्वक उपयोग न किया जाए तो स्थैतिक मेमोरी आवंटन बफर ओवरफ्लो जैसी समस्याओं को भी जन्म दे सकता है।

C में डायनेमिक मेमोरी एलोकेशन क्या है?

सी में डायनेमिक मेमोरी आवंटन एक प्रोग्राम के रनटाइम के दौरान वेरिएबल्स और डेटा संरचनाओं के लिए मेमोरी आवंटित करने और हटाने को संदर्भित करता है। स्थैतिक मेमोरी आवंटन के विपरीत, जहां मेमोरी को संकलन समय पर आवंटित किया जाता है और स्थिर रहता है, गतिशील मेमोरी आवंटन आपको आवश्यकतानुसार ऑपरेटिंग सिस्टम से मेमोरी का अनुरोध करने और इसे तब जारी करने की अनुमति देता है जब इसकी आवश्यकता नहीं रह जाती है। यह मेमोरी संसाधनों के प्रबंधन में अधिक लचीलापन प्रदान करता है और डेटा संरचनाएं बनाने के लिए आवश्यक है जिनका आकार रनटाइम पर निर्धारित किया जाता है।

यह भी पढ़ें:  कैश बनाम कुकीज़: अंतर और तुलना

डायनेमिक मेमोरी आवंटन तब उपयोगी होता है जब आप संकलन समय पर आवश्यक मेमोरी आकार नहीं जानते हैं, या जब प्रोग्राम निष्पादन के दौरान मेमोरी आवश्यकताएं बदल सकती हैं। सामान्य उपयोग के मामलों में गतिशील सरणियाँ, लिंक की गई सूचियाँ, पेड़ और अन्य डेटा संरचनाएँ बनाना शामिल है जो आवश्यकतानुसार बढ़ या सिकुड़ सकती हैं।

सी में स्टेटिक और डायनेमिक मेमोरी आवंटन के बीच अंतर

  1. प्रोग्राम चलने से पहले संकलन समय के दौरान स्टेटिक मेमोरी आवंटित की जाती है। डायनामिक मेमोरी रनटाइम के दौरान आवंटित की जाती है, जबकि प्रोग्राम निष्पादित हो रहा है।
  2. स्थैतिक मेमोरी का आकार संकलन समय पर निर्धारित होता है और प्रोग्राम के निष्पादन के दौरान स्थिर रहता है। गतिशील मेमोरी का आकार रनटाइम पर निर्धारित किया जा सकता है और प्रोग्राम के निष्पादन के दौरान बदला जा सकता है।
  3. स्टेटिक कम लचीला है, क्योंकि मेमोरी आवंटन निश्चित है और रनटाइम के दौरान इसे बदला नहीं जा सकता है। डायनामिक अधिक लचीला है, क्योंकि मेमोरी को आवश्यकतानुसार आवंटित, आकार बदला और हटाया जा सकता है।
  4. स्टेटिक वेरिएबल्स को स्थिर रूप से आवंटित किया जाता है और उनका जीवनकाल पूरे प्रोग्राम निष्पादन तक फैला होता है। डायनामिक मेमोरी को गतिशील रूप से आवंटित किया जाता है और यह केवल तब तक मौजूद रहता है जब तक प्रोग्राम इसका संदर्भ रखता है; इसे मुफ़्त() का उपयोग करके जारी किया जा सकता है।
  5. संकलक स्थैतिक का प्रबंधन करता है; प्रोग्रामर को किसी स्पष्ट मेमोरी प्रबंधन की आवश्यकता नहीं है। डायनामिक को मॉलोक(), कॉलोक(), रियललोक() और फ्री() जैसे फ़ंक्शंस का उपयोग करके स्पष्ट मेमोरी आवंटन और डीलोकेशन की आवश्यकता होती है।

सी में स्टेटिक और डायनेमिक मेमोरी आवंटन के बीच तुलना

तुलना के पैरामीटरस्थैतिक मेमोरी आवंटनगतिशील मेमोरी आवंटन
आरंभीकरणवेरिएबल्स को डिफ़ॉल्ट मानों (वैश्विक और स्थैतिक वेरिएबल्स के लिए शून्य) के लिए प्रारंभ किया जाता है।गतिशील रूप से आवंटित मेमोरी में अपरिभाषित मान होते हैं; स्पष्ट आरंभीकरण की आवश्यकता है।
मेमोरी स्थानमेमोरी को प्रोग्राम के डेटा सेगमेंट में आवंटित किया जाता है।मेमोरी को प्रोग्राम के मेमोरी स्पेस के हीप सेगमेंट में आवंटित किया जाता है।
सारणी का आकारसंकलन के समय सारणी का आकार ज्ञात होना चाहिए; निर्धारित माप।Realloc() का उपयोग करके ऐरे को गतिशील रूप से आकार दिया जा सकता है।
उपरिकम ओवरहेड, क्योंकि प्रोग्राम स्टार्टअप के दौरान मेमोरी एक बार आवंटित की जाती है।रनटाइम आवंटन और संभावित मेमोरी विखंडन के कारण अधिक ओवरहेड।
दायरा और पहुंचवेरिएबल अपने संबंधित दायरे में पहुंच योग्य हैं।गतिशील रूप से आवंटित मेमोरी को फ़ंक्शंस के चारों ओर पारित किया जा सकता है, जिससे इसका दायरा बढ़ जाता है।
संदर्भ
  1. https://ieeexplore.ieee.org/abstract/document/6807799/
  2. https://inria.hal.science/hal-02456533/document
यह भी पढ़ें:  सिमिलरवेब बनाम स्पाईफू: अंतर और तुलना

अंतिम अद्यतन: 19 सितंबर, 2023

बिंदु 1
एक अनुरोध?

मैंने आपको मूल्य प्रदान करने के लिए इस ब्लॉग पोस्ट को लिखने में बहुत मेहनत की है। यदि आप इसे सोशल मीडिया पर या अपने मित्रों/परिवार के साथ साझा करने पर विचार करते हैं, तो यह मेरे लिए बहुत उपयोगी होगा। साझा करना है ♥️

एक टिप्पणी छोड़ दो

क्या आप इस लेख को बाद के लिए सहेजना चाहते हैं? अपने लेख बॉक्स में सहेजने के लिए नीचे दाएं कोने में दिल पर क्लिक करें!