2009-09-10 10 views
5

StackOverflowException के साथ हार्डकोड या फेंकने की शर्तों को कोड पर चल रहा है?StackOverflowException

मैं लगभग बाद में निश्चित हूं लेकिन मेरी खोजों में विफल रहा हूं और यहां पर्याप्त प्रश्न नहीं पूछते हैं।

+0

आप शर्तों से क्या मतलब रखते हैं? जब स्टैक भर जाता है तो इसे फेंक दिया जाता है और एक विधि स्थानीय चर को पकड़ने के लिए ढेर पर अधिक जगह आवंटित करने का प्रयास करती है, और विफल हो जाती है। विशेष रूप से, यह "लोकलोक" आईएल ओपोड है जो इसे फेंकता है। –

+0

मेरा मतलब है कि जब स्टैक अनिवार्य रूप से भर जाता है या यह स्मृति का कुछ अन्य प्रतिशत या वर्तमान मशीन के कुछ अन्य अनुपात के लिए कोई कठोर सीमा है? – Pat

उत्तर

8

the documentation से:

... फेंक दिया जब निष्पादन ढेर overflows, क्योंकि यह कई सारे नेस्टेड विधि कॉल होता है।

चूंकि ढेर का आकार आर्किटेक्चर-निर्भर है और मशीन पर भी ओवरराइड किया जा सकता है, हां, यह मान हार्ड-कोडेड नहीं है, हालांकि यह आमतौर पर विंडोज पर बहुत स्थिर है। अगर मुझे सही याद है, तो यह डिफ़ॉल्ट रूप से आकार में 1 एमबी है।

+0

+1। अच्छा उत्तर। – David

0

ढेर फ्रेम अपने ओएस की को संबोधित मोड के आधार पर अलग अलग होंगे। मेरा मानना ​​है कि x64 थोड़ा बड़ा ढेर फ्रेम का उपयोग करता है। ध्यान रखें कि प्रक्रिया स्थान x86 से अधिक बढ़ने में सक्षम है, इसलिए कुल मिलाकर आप x64 पर अधिक फ़्रेम स्वीकार करने के लिए अपने स्टैक को कॉन्फ़िगर करने में सक्षम होना चाहिए, यदि रैम और स्वैप फ़ाइल आकार कोई समस्या नहीं है।

0

निष्पादन स्टैक ओवरफ़्लो होने पर फेंक दिया गया अपवाद क्योंकि इसमें बहुत अधिक नेस्टेड विधि कॉल शामिल हैं। इस वर्ग को विरासत में नहीं मिला जा सकता है। MSDN

मैंने कुछ बदलावों के साथ इस code को आजमाया। मैं अपने अनुभव के अनुसार उपरोक्त बयान बदलता हूं

फ्रेमवर्क 4.0 निष्पादन स्टैक ओवरफ़्लो होने पर फेंक दिया गया अपवाद क्योंकि इसमें 7573 नेस्टेड विधि कॉल शामिल हैं। इस वर्ग को विरासत नहीं बनाया जा सकता।

फ्रेमवर्क 2.0 निष्पादन स्टैक ओवरफ़्लो होने पर फेंक दिया गया अपवाद क्योंकि इसमें 7038 नेस्टेड विधि कॉल शामिल हैं। इस वर्ग को विरासत नहीं बनाया जा सकता।