Stack vs Heap Memory Allocation In Hindi.

हेलो दोस्तों आज के इस ब्लॉग पोस्ट(Stack vs Heap Memory Allocation In Hindi) में हम Stack और heap memory allocation के बीच अंतर देखने वाले है | Stack memory allocation function call के समय पर होती है और heap memory allocation program execution के टाइम होती है | c/c++/java प्रोग्राम में हम मेमोरी या तो Stack में allocate कर सकते है या फिर Heap में |

Stack vs Heap Memory Allocation In Hindi:

Stack Allocation:

Stack Allocation में जो मेमोरी एलोकेशन होता है वो मेमोरी के contiguous blocks में होता है | और हम इसे Stack memory एलोकेशन इसलिए कहते है क्योकि जो मेमोरी एलोकेशन होता है वो फंक्शन कॉल पर होता है जिसे हम Stack कहते है |Stack vs Heap Memory Allocation In Hindi|

और जब भी फंक्शन कॉल होता है तब कम्पाइलर को यह ज्ञात होता है कि कितनी मेमोरी allocate करनी है | और इस तरह वेरिएबल को स्टैक में मेमोरी allocate की जाती है |Stack vs Heap Memory Allocation In Hindi|

और जैसे ही फंक्शन कॉल ओवर हो जाता है वैसे ही वेरिएबल से मेमोरी de -allocate कर दी जाती है | और हाँ प्रोग्रामर को इस Stack variable को मेमोरी एलोकेशन और de -Allocation के बारे में चिंता करने की कोई जरुरत नहीं होती है |

इस टाइप के मेमोरी एलोकेशन को हम temporary मेमोरी एलोकेशन भी कहते है | क्योकि जैसे ही किसी मेथड का execution ख़तम हो जाता है वैसे ही वो सभी डाटा जो इस मेथड को बिलोंग करते है वो Stack मेमोरी से बाहर अथवा flush out कर दिए जाते है |

इसका का मतलब यह है कि Stack memory में किसी भी वेरिएबल की वैल्यू तभी तक accessible है जब तक वह method कम्पलीट न हुआ हो और अभी रनिंग स्टेट में चल रहा हो |

Key Points:

Stack memory एक temporary memory है जिसमे डाटा members तभी तक accessible है जब तक method current में execute हो रहा है |

Stack memory का Allocation और de -Allocation ऑटोमेटिकली होता है जैसे ही कोई मेथड execution स्टार्ट और फिनिश होता है |

जब Stack memory पूरी तरह से filled हो जाती है तब हमें JVM के द्वारा इस तरह का error मैसेज शो होता है ‘java .lang .StackOverFlowError by JVM’

Stack एलोकेशन जो है वो Heap Allocation से safer होता है क्योकि इसमें जो डाटा stored होता है उसे सिर्फ owner Thread ही Access कर सकता है |

Stack memory Allocation जो है वो Heap memory एलोकेशन के compare में फास्टर होती है | पर Stack मेमोरी में जो storage होता है वो Heap memory स्टोरेज से कम होता है |

CPP:

int main()
{
// All these variables get memory
// allocated on stack
int a;
int b[10];
int n = 20;
int c[n];
}

Heap Allocation:

यह Heap मेमोरी तब allocate होती है जब प्रोग्रामर के द्वारा लिखे गए इंस्ट्रक्शंस का execution होता है | एक बात ध्यान रहिये कि इस Heap का डाटा स्ट्रक्चर Heap से कोई लेना देना नहीं है |

इसे Heap इसलिए बुलाते है क्योकि यह एक मेमोरी का ढेर है जिसे प्रोग्रामर allocate और de -allocate कर सकता है |

हर बार जब हम एक ऑब्जेक्ट को क्रिएट करते है तब यह हमेशा ही हीप मेमोरी में क्रिएट होता है | और यह ऑब्जेक्ट जिस भी इनफार्मेशन को रिफरेन्स करते है वो सभी स्टैक मेमोरी में स्टोर होती है |

Heap memory जो है वो Stack memory जितनी सेफ नहीं है क्योकि Heap memory में जो भी डाटा स्टोर होता है वो सभी थ्रेड्स के लिए एक्सेसिबल और विज़िबल होता है | अगर प्रोग्रामर द्वारा इसे अच्छे से हैंडल न किया जाये तो प्रोग्राम में मेमोरी लीक का ख़तरा हमेशा बना रहता है |

Heap memory Allocation को further हम तीन categories में डिवाइड कर सकते है |

और यह categories हमें डाटा(object) की priority सेट करने में मदद करती है जिन्हे हमें Heap memory अथवा garbage कलेक्शन में स्टोर करना है |

Young Generation – यह मेमोरी का वह portion होता है जहाँ पर डाटा(objects) क्रिएट किये जाते है और उन्हें मेमोरी allocate की जाती है | और जब यह memory पूरी तरह से filled हो जाती है तब बाकी बचे डाटा को grabage collection में स्टोर करते है |

Old or Tenured Generation – यह मेमोरी का वो हिस्सा होता है जहाँ पर old data (objects) रखे जाते है | यह डाटा(objects) ऐसे होते है जो या तो बहुत फ्रेक्वेंटली use नहीं होते है या फिर बिलकुल भी use नहीं होते है |

Permanent Generation – यह हिस्सा Heap मेमोरी का वो हिस्सा होता है जो की JVM के metadata को रखता है | और यह metadata को हम runtime classes और application methods के लिए use करते है |

Key Points:

जब Heap space पूरी तरह से फुल होता है तब हम यह मैसेज रिसीव करते है ‘जावा.लांग.ोटॉमेमोरएर्रर बी JVM’|

यह Heap memory स्कीम जो है वो Stack memory स्कीम से थोड़ी different होती है | यहाँ पर स्टैक जैसे मेमोरी का मेमोरी का automatic de -Allocation नहीं होता है अथवा ऐसा कोई भी फीचर्स नहीं होता है |

memory को क्लीन करने के लिए और उससे old और unused objects हटाने के लिए हमें garbage collector का use करना पड़ता है |

Heap memory का processing time (accessing time ) Stack memory के compare में स्लो होता है |

Heap memory में डाटा की सेफ्टी का भी कंसर्न रहता है क्योकि इसमें जो डाटा होता है वो सभी थ्रेड्स के लिए विज़िबल और एक्सेसिबल होता है |

Heap memory का साइज अथवा स्टोरेज Stack मेमोरी से कही ज्यादा होता है |

Heap memory तब तक exist करती है अथवा accessible रहती है जब तक की पूरी एप्लीकेशन (जावा program) रन होता रहता है |

CPP:

int main()
{
// This memory for 10 integers
// is allocated on heap.
int *ptr = new int[10];
}

Java:

class Emp {
	int id;
	String emp_name;

	public Emp(int id, String emp_name) {
		this.id = id;
		this.emp_name = emp_name;
	}
}

public class Emp_detail {
	private static Emp Emp_detail(int id, String emp_name) {
		return new Emp(id, emp_name);
	}

	public static void main(String[] args) {
		int id = 21;
		String name = "Maddy";
		Emp person_ = null;
		person_ = Emp_detail(id, emp_name);
	}
}

Conclusion – ऊपर दिए example को analyze करने के बाद :

जैसे ही हम प्रोग्राम का execution स्टार्ट करते है वैसे ही सभी runtime classes Heap memory एरिया में स्टोर हो जाती है |

इसके बाद हम main method को find करते है जो कि Stack एरिया में स्टोर होता है और उसके साथ उसके primitive (local) वेरिएबल भी स्टोर रहते है | और उसके reference variable जैसे कि emp , emp _Detail Stack में स्टोर रहते है |

और यह अपने corresponding ऑब्जेक्ट को पॉइंट आउट करते है जो कि Heap मेमोरी स्पेस में स्टोर है |

अगली लाइन में parameterized constructor कॉल होता है Main मेथड से और यह भी एक मेमोरी स्पेस allocate करता है same Stack memory block के टॉप पर | और यह निम्नलिखित डाटा को स्टोर करता है:

Stack memory के invoked object के object reference को |

primitive value (primitive data type) int id को Stack memory में|

स्ट्रिंग emp_name के रिफरेन्स वेरिएबल को जो की यहाँ से एक्चुअल स्ट्रिंग को हीप मेमोरी में पॉइंट करता है |

अब Main मेथड जो है वो फिर से emp _Detail () static method को कॉल करता है जिसका Allocation Stack memory ब्लॉक में ही होता है वो भी पिछले वाली स्टैक मेमोरी ब्लॉक के टॉप पर

इसलिए नए object emp के लिए और सभी instance variables के लिए memory Heap में allocate होगी |

Heap एंड Stack memory Allocation के बीच मुख्य अंतर:

Stack में memory Allocation और de -Allocation compiler द्वारा automatically होता है | जबकि Heap memory में यह प्रोग्रामर को मैन्युअली करना पड़ता है |

Heap frame को हैंडल करना Stack frame को handle करने से ज्यादा costlier है|

Stack के केस में memory shortage होने के chances ज्यादा होते है जबकि Heap के केस में memory fragmentation का issue रहता है |

Stack memory frame को एक्सेस करना ज्यादा आसान है क्योकि स्टैक में मेमोरी का एक छोटा region होता है इसलिए यह cache फ्रेंडली भी है | पर Heap के case में मेमोरी का एक्सेस easier नहीं है क्योकि यहाँ पर memory डिस्पेर्सेड रहती है पूरी मेमोरी में इसलिए इसमें ज्यादातर caches miss हो जाते है |

Stack ज्यादा flexible नहीं होता है क्योकि स्टैक में allocated मेमोरी साइज को चेंज नहीं कर सकते है | जबकि Heap के केस में alloted मेमोरी साइज को alter किया जा सकता है |

Heap का accessing time स्टैक से ज्यादा होता है |

Stack vs Heap Memory Allocation In Hindi In Tabular Form:

ParameterSTACKHEAP
Basicmemory contiguous block में allocate होती है |memory एक रैंडम आर्डर में allocate होती है |
Allocation and De -Allocation :कम्पाइलर के द्वारा आटोमेटिक होता है |प्रोग्रामर के द्वारा मैन्युअल होता है|
costLessMore
Implementation :Easyhard
Access timefasterslower
Main issue :shortage problemfragmentation problem
The locality of reference :excellentadequate
safetyThread safe है डाटा केवल ओनर थ्रेड द्वारा एक्सेस किया जा सकता है |Thread safe नहीं है , डाटा किसी भी थ्रेड के लिए विज़िबल और एक्सेसिबल है
Flexibilityफिक्स्ड साइज(Fixed size)resizing is possible
Datatype structure :Linearhierarchical
Stack vs Heap Chart: Stack vs Heap Memory Allocation In Hindi

Conclusion:

हेलो दोस्तों आज के इस blog post(Stack vs Heap Memory Allocation In Hindi) में हम आपको Stack memory और Heap memory के बीच अंतर बताने वाले है | Stack memory function call के समय variable को memory allocate करती है | और Heap memory में programmer के लिखे instruction के execute होते समय ही Heap memory allocate होती है | Stack memory में storage कम होता है और Heap memory में storage अच्छा होता है |

इस ब्लॉग(Stack vs Heap Memory Allocation In Hindi) को लेकर आपके मन में कोई भी प्रश्न है तो आप हमें इस पते [email protected]पर ईमेल लिख सकते है|

आशा करता हूँ, कि आपने इस पोस्ट(Stack vs Heap Memory Allocation In Hindi) को खूब एन्जॉय किया होगा|

आप स्वतंत्रता पूर्वक अपना बहुमूल्य फीडबैक और कमेंट यहाँ पर दे सकते है|

आपका समय शुभ हो|

Anurag

I am a blogger by passion, a software engineer by profession, a singer by consideration and rest of things that I do is for my destination.