स्टैक का उपयोग स्थानीय चर स्टोर करने, फ़ंक्शन कॉल में पैरामीटर पास करने, स्टोर रिटर्न पते को स्टोर करने के लिए किया जाता है। थ्रेड के ढेर में एक निश्चित आकार होता है जो थ्रेड बनने पर निर्धारित होता है। यही वह मूल्य है जिसका आप उल्लेख कर रहे हैं।
स्टैक आकार निर्धारित होता है जब धागा बनाया जाता है क्योंकि इसे संगत पता स्थान पर कब्जा करने की आवश्यकता होती है। इसका मतलब है कि धागे के ढेर के लिए संपूर्ण पता स्थान धागे बनाने के बिंदु पर आरक्षित होना चाहिए।
यदि ढेर बहुत छोटा है तो यह अतिप्रवाह हो सकता है। यह एक त्रुटि स्थिति है जिसे स्टैक ओवरफ़्लो के नाम से जाना जाता है, जिससे इस वेबसाइट ने इसका नाम लिया। जब आप कोई फ़ंक्शन कॉल करते हैं तो निम्न में से कुछ या सभी होते हैं:
- पैरामीटर स्टैक पर धकेल दिए जाते हैं।
- वापसी पता स्टैक पर धकेल दिया जाता है।
- फ़ंक्शन के स्थानीय चर के लिए स्थान युक्त एक स्टैक फ्रेम बनाया गया है।
यह सब ढेर से अंतरिक्ष का उपभोग करता है। जब फ़ंक्शन बदले में एक और फ़ंक्शन कॉल करता है, तो अधिक स्टैक स्पेस का उपभोग होता है। चूंकि कॉल स्टैक गहरा हो जाता है, अधिक स्टैक स्पेस की आवश्यकता होती है।
स्टैक आकार को बहुत कम सेट करने का नतीजा यह है कि आप ढेर को खत्म कर सकते हैं और इसे ओवरफ्लो कर सकते हैं। यह एक टर्मिनल शर्त है जिससे आप ठीक नहीं हो सकते हैं। निश्चित रूप से 32 बाइट्स (एक पृष्ठ तक गोलाकार जो 4096 बाइट्स है) लगभग सभी धागे के लिए बहुत छोटा है।
यदि आपके पास बहुत सारे धागे वाले प्रोग्राम हैं, और आप जानते हैं कि थ्रेड को 1 एमबी स्टैक आकार आरक्षित करने की आवश्यकता नहीं है तो छोटे स्टैक आकार का उपयोग करने के लिए लाभ हो सकते हैं। ऐसा करने से उपलब्ध प्रक्रिया पता स्थान को समाप्त करने से बच सकते हैं।
दूसरी तरफ आपके पास एक ऐसे थ्रेड के साथ एक प्रोग्राम हो सकता है जिसमें गहरे कॉल स्टैक हैं जो बड़ी मात्रा में स्टैक स्पेस का उपभोग करते हैं। इस परिदृश्य में आप डिफ़ॉल्ट 1 एमबी से अधिक आरक्षित हो सकते हैं।
हालांकि, जब तक आपके पास अन्यथा करने का कोई मजबूत कारण न हो, तो संभवतः डिफ़ॉल्ट स्टैक आकार से चिपकने की संभावना है।
स्रोत
2015-11-14 10:56:08
आपके द्वारा लिंक किए गए पृष्ठ में यह है: * अधिक जानकारी के लिए, [थ्रेड स्टैक आकार] देखें (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686774 (v = vs.85) .aspx) *। कृपया जिस दस्तावेज से आप लिंक करते हैं उसे पढ़ें। – bolov
शायद 32 बाइट्स स्टैक के लिए पूछना भी संभव नहीं है, न्यूनतम आकार एक मेमोरी पेज होना चाहिए (आमतौर पर 4 केबी)। –
आपके प्रश्न से संबंधित नहीं है, लेकिन सी ++ का उपयोग करते समय, आपको [Createbehread] (https: // msdn) के बजाय [_beginthreadex] (https://msdn.microsoft.com/en-us/library/kdzttdcb.aspx) पर कॉल करना चाहिए। microsoft.com/en-us/library/windows/desktop/ms682453.aspx)। यह दस्तावेज़ीकरण में स्पष्ट रूप से वर्तनी है। – IInspectable