🔴 Advanced  ·  Lesson 33

Dynamic Memory

Fixed size की समस्या

जब आप int marks[50]; लिखते हैं, आप अंदाज़ा लगा रहे हैं। अगर सिर्फ़ 3 students आएँ — आपने 47 slots बर्बाद किए। अगर 60 आएँ — कम पड़ गया। Fixed array आपको size पहले तय करने को मजबूर करता है, इससे पहले कि program को पता हो कि असल में कितना data होगा।

Dynamic memory इसे हल करता है: यह program को ठीक उतनी memory माँगने देता है जितनी चाहिए, चलते समय। यह इस विचार का सरल परिचय है; पूरे malloc/calloc/realloc/free reference के लिए देखें C में dynamic memory allocation

Stack बनाम heap

आपके program के पास data रखने की दो मुख्य जगहें हैं, और इनका अंतर समझना dynamic memory की कुंजी है।

StackHeap
प्रबंधनअपने आप (compiler)आप (malloc/free)
Sizeछोटा, जल्दी तयबड़ा, लचीला
LifetimeFunction लौटने तकजब तक आप free न करें
गतिबहुत तेज़थोड़ा धीमा

सामान्य variables और fixed arrays stack पर रहते हैं। Dynamic memory heap से आती है।

Dynamic memory क्यों है

Dynamic memory आपको दो शक्तियाँ देती है जो stack नहीं दे सकता:

  • Size run time पर तय — user से पूछें कितने items, फिर ठीक उतने allocate करें।
  • Function से ज़्यादा जीने वाली memory — function के अंदर बना data उसके लौटने के बाद भी valid रह सकता है, क्योंकि heap अपने आप साफ़ नहीं होता।

आपका पहला dynamic array

यह सबसे सरल उदाहरण है: एक array जिसका size user चुनता है।

C Language
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n;
    printf("Kitne numbers? ");
    scanf("%d", &n);

    int *arr = malloc(n * sizeof(int));   // theek n ints
    if (arr == NULL) return 1;            // hamesha check

    for (int i = 0; i < n; i++) arr[i] = i * i;
    for (int i = 0; i < n; i++) printf("%d ", arr[i]);

    free(arr);                            // wapas dein
    return 0;
}
Run: Kitne numbers? 4
Output:
0 1 4 9

Code में कोई fixed size नहीं — n इसे program चलते समय तय करता है। यही dynamic memory का पूरा मकसद है।

कब इस्तेमाल करें

  • Program चलने तक size पता न हो।
  • Data को बनाने वाले function के खत्म होने के बाद भी बचना हो।
  • Data बड़ा हो — heap में stack से कहीं ज़्यादा जगह है।
💡 जब हो सके सरल रखें

छोटी, ज्ञात मात्रा के data के लिए stack पर सादा array आसान और तेज़ है। Dynamic memory तब लें जब सच में लचीलापन चाहिए।

आम गलतियाँ

  • Memory इस्तेमाल करने से पहले malloc को NULL के लिए जाँचना भूलना।
  • free भूलना, तो program धीरे-धीरे memory leak करता है।
  • Free करने के बाद memory इस्तेमाल करना (dangling pointer)।
  • यह सोचना कि heap memory खुद साफ़ हो जाती है — जब तक आप free न करें, नहीं होती।
🏋️ अभ्यास

उदाहरण बदलें ताकि user से n numbers dynamic array में पढ़े, फिर उनका योग print करे। अलग-अलग n के लिए पुष्टि करें, और अंत में हमेशा free करें।

सारांश

  • Fixed arrays आपको size बहुत जल्दी अंदाज़ने को मजबूर करते हैं।
  • Stack अपने आप पर छोटा है; heap बड़ा और आपके द्वारा प्रबंधित।
  • Dynamic memory (heap से) data को run time पर size करने और functions से ज़्यादा जीने देती है।
  • माँगने को malloc इस्तेमाल करें, NULL जाँचें, और काम पूरा होने पर free करें।
  • malloc, calloc, realloc और free गहराई से देखें dynamic memory allocation

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में dynamic memory क्या है?
Dynamic memory वह memory है जो आपका program चलते समय माँगता है, बजाय इसके कि code लिखते समय मात्रा तय कर दें। आप इसे heap नामक क्षेत्र से malloc से माँगते हैं, इस्तेमाल करते हैं, फिर free से लौटाते हैं। इससे program run time पर तय किसी भी मात्रा का data संभाल सकता है।
C में stack और heap में क्या अंतर है?
Stack local variables और function calls अपने आप रखता है, तेज़ है, और function लौटने पर साफ़ हो जाता है — पर उसका size सीमित और जल्दी तय होता है। Heap एक बड़ा pool है जिसे आप खुद malloc और free से प्रबंधित करते हैं, और वहाँ memory तब तक रहती है जब तक आप न छोड़ें, जो इसे dynamic data के लिए उपयुक्त बनाता है।
अगर arrays हैं तो dynamic memory की ज़रूरत क्यों?
सामान्य array को उसका size program लिखते समय पता होना चाहिए, तो वह या तो जगह बर्बाद करता है या कम पड़ता है। Dynamic memory आपको ठीक उतनी मात्रा माँगने देता है जितनी program को पता चलने पर चाहिए — जैसे user के बताने के बाद कि कितने items हैं — तो न कुछ बर्बाद होता है न कम पड़ता है।
Dynamically allocated memory कहाँ रखी जाती है?
यह heap पर रखी जाती है, stack से अलग एक memory क्षेत्र जिसे आपका program हाथ से प्रबंधित करता है। malloc से heap से ली memory तब तक आरक्षित रहती है जब तक आप उसे free से वापस न दें, function calls के पार भी।
क्या dynamic memory सामान्य array से धीमी है?
Heap memory allocate और free करने में थोड़ी लागत होती है जो सादे stack array में नहीं, तो छोटी, fixed मात्रा के लिए सामान्य array सरल और तेज़ है। Dynamic memory तब सार्थक है जब size run time तक अज्ञात हो या data को बनाने वाले function से ज़्यादा जीना हो।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.