मैं जानना चाहूंगा कि मैं अपने प्रोजेक्ट में कितनी रैम का उपयोग कर रहा हूं, जहां तक मैं बता सकता हूं, वास्तव में उस काम को करने का कोई तरीका नहीं है (बाहर जाने और खुद की गणना करने के अलावा)। मुझे एक बड़ी परियोजना में एक मंच मिला है जहां मैंने निर्धारित किया है कि मैं रैम से बाहर चल रहा हूं।
मैंने इसे निर्धारित किया है क्योंकि मैं एक खंड जोड़ सकता हूं और फिर कोई स्पष्ट कारण के लिए मेरे कोड में सभी नरक कहीं और टूट जाते हैं । अगर मुझे #ifndef
कुछ और पता चलता है, तो यह फिर से काम करता है। नए कोड के साथ प्रोग्रामिक रूप से कुछ भी गलत नहीं है।
मुझे थोड़ी देर के लिए संदेह हुआ कि मैं उपलब्ध रैम के अंत तक पहुंच रहा हूं। मुझे नहीं लगता कि मैं बहुत अधिक स्टैक का उपयोग कर रहा हूं (हालांकि यह संभव है), यह निर्धारित करने का सबसे अच्छा तरीका है कि मैं वास्तव में कितना रैम का उपयोग कर रहा हूं?
के माध्यम से जा रहे हैं और इसे बाहर काम करने की कोशिश कर रहा है, मैं जब मैं enums और संरचनाओं के लिए समस्या है; उनकी कितनी मेमोरी है?
पहला संपादित करें: ALSO, मैंने शुरू से ही अपने स्केच को बहुत संपादित किया है, ये वास्तविक परिणाम नहीं हैं जो मुझे शुरू में मिले थे, लेकिन वे वही हैं जो अब मुझे मिल रहे हैं।
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
पहली पंक्ति (पाठ १4५५४ के साथ) काम नहीं कर रही थी, बहुत संपादन के बाद दूसरी पंक्ति (पाठ १६३१६ के साथ) काम कर रही है जैसा कि इसे करना चाहिए।
संपादित करें: तीसरी पंक्ति में सब कुछ काम कर रहा है, धारावाहिक पढ़ना, मेरे नए कार्य आदि, मैंने अनिवार्य रूप से कुछ वैश्विक चर और डुप्लिकेट कोड हटा दिए हैं। मैं इसका उल्लेख करता हूं क्योंकि (संदेह के रूप में) यह प्रति sae इस कोड के बारे में नहीं है, इसे रैम उपयोग के बारे में होना चाहिए। जो मुझे मूल प्रश्न पर वापस लाता है, "इसे सबसे अच्छा कैसे मापें" मैं अभी भी कुछ उत्तरों की जांच कर रहा हूं, धन्यवाद।
मैं वास्तव में उपरोक्त जानकारी की व्याख्या कैसे करूं?
अब तक मेरी समझ है:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
चूंकि BSS 1024 बाइट्स से काफी कम है, इसलिए दूसरा काम क्यों करता है, लेकिन पहला नहीं है? यदि यह है DATA+BSS
तो दोनों 1024 से अधिक पर कब्जा कर लेते हैं।
पुन: संपादित करें: मैंने प्रश्न को कोड शामिल करने के लिए संपादित किया, लेकिन अब मैंने इसे हटा दिया है क्योंकि इसका वास्तव में समस्या से कोई लेना-देना नहीं था (शायद खराब कोडिंग प्रथाओं, चर घोषणाओं और इस तरह के अलावा)। यदि आप वास्तव में इसे देखना चाहते हैं तो आप संपादन के माध्यम से वापस देखकर कोड की समीक्षा कर सकते हैं। मैं प्रश्न को वापस हाथ में लेना चाहता था, जो कि अधिक आधारित था: रैम उपयोग कैसे मापें।
String
अपने कार्यक्रमों में टाइप का उपयोग करते हैं? यह बार-बार गतिशील मेमोरी आवंटन और रिलीज़ करने के लिए जाना जाता है, जो कि उस बिंदु पर ढेर को खंडित कर सकता है जहां आपके पास कोई मेमरी नहीं रह सकती है।
String
ओवरहेड के कारण एस से दूर रहता हूं । मुझे खुशी है कि मैं चार सरणियों के साथ काम कर रहा हूं, उन्होंने कहा, मैं हमेशा अपने सभी चार सरणियों को एक निश्चित आकार के साथ परिभाषित करता हूं (फिलहाल, मेरे पास एक बाइट सरणी है जो विशुद्ध रूप से नहीं है क्योंकि मैं विभिन्न recompiles के लिए सामग्री की लंबाई को बदल देता हूं।