मैं Ravenscar सबसेट का उपयोग कर एक एडी प्रोग्राम लिख रहा हूं (इस प्रकार, मैं निष्पादन समय पर चल रहे कार्यों की संख्या से अवगत हूं)। कोड -fstack-check
स्विच सक्षम के साथ जीसीसी द्वारा संकलित किया गया है। यदि प्रोग्राम में से कोई भी कार्य उनके ढेर से अधिक हो तो प्रोग्राम रनटाइम पर STORAGE_ERROR बढ़ाएगा।Ravenscar प्रोग्राम में स्टैक उपयोग निर्धारित करने के लिए सर्वोत्तम अभ्यास
एडीए उन लोगों के लिए ऊपरी सीमा निर्धारित करने की अनुमति देता (कार्य-विशिष्ट) तो तरह-अपने कार्य के विनिर्देश के दौरान स्टैक्स:
pragma Storage_Size (Some_Value);
अब मैं सोच रहा था क्या विकल्प मेरे पास Some_Value
निर्धारित करने के लिए। मैंने अब तक जो सुना है:
- जंगली अनुमान तब तक करें जब तक कोई STORAGE_ERROR नहीं उठाया जाता है। यह ओपी सुझाव देता है कि here क्या है।
- वहां
-fstack-usage
के आउटपुट को फ़ीड करें। - here के रूप में उल्लिखित कुछ gnat विशिष्ट एक्सटेंशन का उपयोग करें (यह तकनीकी रूप से आइटम # 2 से अलग कैसे है?)।
- gnatstack जैसे स्टैक विश्लेषक प्राप्त करें और इसे आपके लिए काम करने दें।
अगर मैं इस बात को समझ सही ढंग से सब से ऊपर की तकनीक है गतिशील (यानी वे काम करने के लिए चलाने के लिए कार्यक्रम की आवश्यकता होती है)। स्थिर दृष्टिकोण भी कल्पना योग्य हैं? जैसे कुछ एडा के उच्च अखंडता विकल्पों (जैसे No_Recursion, और क्या?) के माध्यम से खुद को प्रतिबंधित करके
शायद आप में से कोई भी इस समस्या से निपटने के लिए कुछ सर्वोत्तम प्रथाओं का नाम दे सकता है और/या मेरी (निश्चित रूप से अपूर्ण) सूची में विस्तार/टिप्पणी कर सकता है।
बोनस प्रश्न: उपर्युक्त प्रगति निर्दिष्ट नहीं होने पर कार्य के ढेर का डिफ़ॉल्ट आकार क्या होता है? जीसीसी का docs केवल यह मान देता है कि यह मान किसी भी ठोस संख्या के बिना रनटाइम पर निर्भर करता है।
अच्छी पृष्ठभूमि अनुसंधान के साथ अच्छा सवाल! –
डिफ़ॉल्ट स्टैक आकार 'System.Parameters.Default_Stack_Size' (फ़ाइल' s-parame.adb') में दिया गया है। –
@ सिमॉन: क्या वह ढेर आकार पर्यावरण कार्य, घोषित कार्यों या सभी कार्यों से संबंधित है? मैं पूछता हूं क्योंकि मैं एक "सेट स्टैक आकार" विकल्प में आया था जो पर्यावरण कार्य को प्रभावित नहीं करता था - जो स्पष्ट रूप से उस विशिष्ट कंपाइलर रिलीज के साथ किसी भी माध्यम से सेटटेबल नहीं था, जिसने उलिमिट सेटिंग्स का भी उल्लंघन किया था। मैंने पूरे कार्यक्रम को एक नए कार्य में ले जाकर इसके आसपास काम किया ... –