मुझे आमतौर पर यह तय करने में कोई समस्या नहीं है कि कुछ डेटा वैश्विक होना चाहिए, स्थिर या स्टैक पर (यहां कोई गतिशील आवंटन नहीं है, इसलिए ढेर का कोई उपयोग नहीं)। मैंने कुछ क्यू / ए भी पढ़ा है जैसे कि यह एक है लेकिन मेरा प्रश्न अधिक विशिष्ट है क्योंकि इसमें बड़ी मात्रा में डेटा शामिल है, सिस्टम मेमोरी की तुलना में बहुत बड़ा है।
मैं एक मौजूदा कोड काम कर रहा हूं जिसे मैं सुधारने की कोशिश करता हूं (डिजाइन, संभव मुद्दे, प्रदर्शन, आदि)। यह कोड केवल 4KB रैम के साथ पुराने 8bit MCU पर चलता है । इस कोड में मैं एक 4KB रैम सिस्टम पर लगभग 1KB (हाँ, 1KB ) के एक सरणी के उपयोग का सामना करता हूं । इस सरणी के प्रत्येक बाइट का उपयोग किया जाता है, यह सवाल नहीं है। समस्या यह है कि यह सरणी उस फ़ाइल में एक स्थिर सरणी है जहां इसे घोषित किया गया है, इसलिए इसका जीवन चक्र कार्यक्रम एक के समान है (अर्थात अनंत माना जा सकता है)।
हालाँकि, कोड को पढ़ने के बाद, मुझे पता चला कि इस सरणी को अनंत जीवन चक्र की कोई आवश्यकता नहीं है, यह पूरी तरह से प्रक्रियात्मक तरीके से बनाया और निपटा है, इसलिए हमें इसे केवल उस फ़ंक्शन में घोषित करने में सक्षम होना चाहिए जहां इसका उपयोग किया जाता है, इस तरह यह स्टैक पर होगा, और इसलिए हम इस 1KB रैम को बचाएंगे।
अब सवाल: क्या यह एक अच्छा विचार होगा? डिज़ाइन के दृष्टिकोण से, यदि इसे अनंत / वैश्विक जीवनचक्र की आवश्यकता नहीं है, तो यह स्टैक के अंतर्गत आता है। लेकिन हे, कि 4KB में से 1KB है, क्या इस तरह 25% RAM आवंटित करने का कोई दोष नहीं है? (यह स्टैक का 50% या अधिक हो सकता है)
क्या कोई इस तरह की स्थिति के साथ कुछ अनुभव साझा कर सकता है, या कोई व्यक्ति इस सरणी को स्टैक पर नहीं रखने के लिए किसी वैध कारण के बारे में सोचता है? मैं तकनीकी कमियों के साथ-साथ डिजाइन पर टिप्पणियों की तलाश कर रहा हूं।
केवल एक चीज जो मैं सचेत हूं वह यह है कि मुझे यह सुनिश्चित करना है कि इस समारोह में प्रवेश करते समय मेरे पास वास्तव में 1KB स्टैक फ्री हो। शायद यही सब मुझे ध्यान रखना है, शायद नहीं।