2016-03-01 7 views
10

सी ++ में अधिकतम रिकर्सन गहराई में जानने का कोई तरीका है जब तक कि यह क्रैश होने तक स्पष्ट रूप से रिकर्सन को बुलाए बिना?अधिकतम रिकर्सन गहराई पाएं

मैंने देखा है कि यह ढेर के आकार से सीमित है। शायद यह विशिष्ट रिकर्सन स्तर पर स्टैक में खाली स्थान की मात्रा को खोजने के लिए उपयोगी हो सकता है। क्या यह संभव है?

+1

'सी ++' में कुछ भी नहीं है जो अधिकतम गहराई को परिभाषित करता है। अधिकतम गहराई सीपीयू आर्किटेक्चर, कंपाइलर-विशिष्ट कार्यान्वयन विवरण, और वास्तविक कार्य को रिकर्स किया जा रहा है (बच्चे के कार्यों के साथ-साथ) पर निर्भर है।किसी भी अन्य समस्या की तरह, निश्चित रूप से, यदि आप सभी मानकों को जानते हैं तो आप एक समाधान निर्धारित कर सकते हैं .... लेकिन इस मामले में केवल स्पष्ट कॉल करना और आपको क्या मिल रहा है यह देखना बहुत आसान है। – mah

+1

हालांकि '[temp.inst] 'में एक पैराग्राफ है जो कहता है कि कार्यान्वयन परिभाषित मात्रा है। – NathanOliver

+1

तो यदि रिक्त स्थान को निर्दिष्ट सीमा से नीचे होने पर रोकने के लिए फ्री स्टैक आकार की जांच करने का कोई तरीका है? – Jepessen

उत्तर

2

एकमात्र चीज जिसे मैं अभी सोच सकता हूं, getrlimit का उपयोग अपनी प्रक्रिया के लिए समर्पित स्टैक का अधिकतम आकार प्राप्त करने के लिए करना है। करने के लिए अगली चीज़ वर्तमान में इस्तेमाल किए गए स्टैक आकार को प्राप्त करने का एक तरीका है। मैंने सोचा कि getrusage जाने का तरीका है लेकिन man -page पर देखने के बाद और SO पर कुछ पोस्ट ऐसा लगता है कि यह अब इस विशेष सुविधा का समर्थन नहीं करता है। तो आपको एक और रास्ता खोजना है। मुझे विश्वास है कि Valgrind भी स्टैक उपयोग की रिपोर्ट करता है ताकि उसके स्रोत कोड को देख सकें और दस्तावेज़ीकरण उपयोगी साबित हो सकता है।

एक बार जब आप वर्तमान ढेर आकार प्राप्त कर सकते हैं आप

  • अपनी आरंभिक अवस्था को माप सकते हैं इससे पहले कि आप प्रत्यावर्तन (शुरू, ताकि आप अपने गणना से बाहर कर सकते हैं यह करने के लिए कुछ भी नहीं है के बाद से प्रत्यावर्तन ही)

  • एक एकल पुनरावृत्ति के लिए अपने परिवर्तन

उसी के साथ प्रारंभिक ढेर आवंटन को छोड़कर के साथ क्या कुल स्टैक आकार और एकल रिकर्सन चरण के लिए आवश्यक आवंटन, आपको दिए गए सिस्टम के लिए रिकर्सन की संख्या का अनुमान लगाने में सक्षम होना चाहिए। मुझे यकीन नहीं है कि यह काम करेगा और ऐसे माप भी होंगे, भले ही सटीक का उपयोग कर रहे सिस्टम पर अत्यधिक निर्भर हैं (सभी स्टैक के बाद वर्चुअल मेमोरी की मात्रा से निकटता से संबंधित है)।

2

अधिकतम रिकर्सन गहराई फ़ंक्शन (ओं) द्वारा उपयोग की गई स्मृति की मात्रा, आपके प्लेटफ़ॉर्म पर स्मृति की मात्रा और ओएस या कंपाइलर द्वारा सीमा (यदि कोई है) पर निर्भर करती है।

  • एक समारोह कॉल
  • स्मृति मानकों को पारित कर दिया के कब्जे की भूमि के ऊपर:

    एक पुनरावर्ती कॉल में, स्मृति के कब्जे में है।

  • स्मृति स्थानीय चर

कोई पैरामीटर और कोई स्थानीय चर के साथ एक पुनरावर्ती समारोह के कब्जे में एक उच्च संभव गहराई (पुनरावर्ती कॉल की संख्या) एक समारोह है कि बड़ी वस्तुओं का एक बहुत से गुजरता है और एक पर है की तुलना में होगा बहुत सारे स्थानीय चर।

तो, आपके प्रश्न का उत्तर यह है: रिकर्सिव कॉल की अधिकतम संख्या एक रिकर्सिव कॉल, सिस्टम पर स्मृति की मात्रा और कंपाइलर या ऑपरेटिंग सिस्टम द्वारा लगाई गई किसी भी सीमा पर निर्भर स्मृति की मात्रा पर निर्भर करती है। विभिन्न पुनरावर्ती कार्यों में स्मृति की अलग-अलग मात्रा होती है।

यदि आप इन सभी वस्तुओं को जानते हैं, तो आप संभावित रिकर्सन की अधिकतम संख्या की गणना कर सकते हैं।

संबंधित मुद्दे