Stack vs Heap Memory Allocation In Hindi.

हेलो दोस्तों आज के इस ब्लॉग पोस्ट(Stack vs Heap Memory Allocation In Hindi) में हम Stack और heap memory allocation के बीच अंतर देखने वाले है |

Stack memory allocation function call के समय पर होती है|Stack vs Heap Memory Allocation In Hindi|

और heap memory allocation program execution के टाइम होती है |Stack vs Heap Memory Allocation In Hindi|

C/C++/Java प्रोग्राम में हम मेमोरी या तो Stack में allocate कर सकते है या फिर Heap में |Stack vs Heap Memory Allocation In Hindi

Stack vs Heap Memory Allocation In Hindi:

Stack Allocation:

Stack Allocation में जो मेमोरी एलोकेशन होता है वो मेमोरी के contiguous blocks में होता है |Stack vs Heap Memory Allocation In Hindi|

और हम इसे 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

You can also go through a few more blog links below related to core Java:

Stack vs Heap Memory Allocation In Hindi…
Inner Class In Java In Hindi…
Instance Variable vs Class Variable In Hindi…
Difference Between Instance Variable And Static Variable In Java…
Inner Class With Suitable Example In Java…
Difference Between PHP and JAVA In Hindi…
Why Java Is A Secure Language In Hindi…
Relational operator in Hindi in Java…
Logical operator in Hindi in Java…
Assignment Operator in Hindi in Java…
Unary operator in Java example in Hindi…
Arithmetic operators in Java in Hindi…
Operators In Java In Hindi…
Types Of Inheritance In Hindi…
Garbage Collection In Java In Hindi…
Interface In Java In Hindi|java में Interface क्या होता है…
Access Specifier In Java In Hindi…
Explain Types Of Jdbc Drivers In Detail…
Super Keyword In Java In Hindi…
Static Keyword in Java in Hindi…

Quick Q&A:

What is the difference between stack memory and heap memory? Stack memory और heap memory के बीच क्या अंतर होता है?

Heap मेमोरी जो है उसे एप्लीकेशन के हर पार्ट्स के द्वारा उपयोग किया जाता है|

जबकि स्टैक मेमोरी को केवल एक thread के द्वारा use किया जाता है जिसका execution चल रहा होता है |

जब भी कोई object क्रिएट होता है तो उसे हमेशा Heap memeory स्पेस में स्टोर किया जाता है |

और इस ऑब्जेक्ट के रिफरेन्स पॉइंटर को stack मेमोरी में रखा जाता है |

Is memory allocation faster in stack or heap? stack और Heap में से kisme मेमोरी allocation तेज होता है?

चूकि जो डाटा add और retrieve होता है वो Last in first out manner में होता है|

इसलिए जो stack बेस्ड मेमोरी होती है वो बहुत ही सिंपल और Heap से faster होती है |

Heap बेस्ड मेमोरी को हम dynamic मेमोरी एलोकेशन के नाम से भी जानते है|

क्योकि यह मेमोरी dynamically allocate होती है | जैसे कि malloc .

What is the difference between stack and heap allocation schemes? stack and Heap allocation schemes में क्या अंतर होता है?

देखिये stack और Heap मेमोरी में जो सबसे बड़ा अंतर होता है वो यह होता है|

कि स्टैक मेमोरी जो होती है वो method execution के आर्डर को स्टोर करती है और local variables को स्टोर करती है |

वही दूसरी तरफ जो Heap मेमोरी होती है वो object को स्टोर करती है |

Heap memeory जो है वो dynamically allocate और deallocate होती है|

Is heap and stack stored in RAM? क्या Heap memeory ram में स्टोर होती है?

stack और Heap मेमोरी में जो एक कॉमन बात होती है वो यह होती है कि यह दोनों मेमोरी ही कंप्यूटर की ram में स्टोर होती है |

stack मेमोरी मैनेजमेंट जो है वो LIFO (Last in first out) आर्डर फॉलो करता है|

यह variables को स्टोर करता है और नए variable के लिए memeory space क्रिएट करता है |

वही दूसरी तरफ Heap मेमोरी कोई भी आर्डर टाइप फॉलो नहीं करती है, क्योकि यह मेमोरी blocks को dynamically handle करती है |

Is heap memory a disk or RAM? क्या Heap मेमोरी एक disk अथवा ram है ?

stack और Heap मेमोरी दोनों ही ram memeory का पार्ट है |

Are arrays stored in stack or heap? Arrays जो है वो कहाँ पर स्टोर होते है stack एरिया में अथवा Heap एरिया में?

जैसे कि हम ऊपर एक question में डिसकस कर चुके है कि जितने भी reference types होते है वो Heap एरिया में स्टोर होते है|

और array जो है वो एक reference टाइप है, जिन्हे हम new कीवर्ड की मदद से क्रिएट कर सकते है और यह सब Heap एरिया में स्टोर होते है|

What is the advantage of heap memory allocation? Heap मेमोरी एलोकेशन का क्या advantage होता है?

हीप मेमोरी एलोकेशन के काफी advantages होते है जिनमे से कुछ प्रमुख advantages निम्नलिखित है:

Heap मेमोरी जो है वो lifetime के लिए होती है, क्योकि programmers अब तभी control लेते है जब यह memeory allocate होती है|

मेमोरी में data structure बनाना possible होता है और फिर यह डाटा structure caller को return भी कर सकते है|

यह चीज़ लोकल मेमोरी के case में बिलकुल भी possible नहीं थी|

क्योकि जैसे ही फंक्शन एग्जिट होता था तो memeory भी automatically deallocated हो जाती थी|

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) को लेकर आपके मन में कोई भी प्रश्न है तो आप हमें इस पते support@a5theory.comपर ईमेल लिख सकते है|

आशा करता हूँ, कि आपने इस पोस्ट(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.