पृष्ठभूमि: मैं ईबीएमएल फ़ाइल लिखने के लिए माइक्रो कंट्रोलर सी कोड लिख रहा हूं। EBML नेस्टेड तत्वों के साथ एक बाइनरी एक्सएमएल की तरह है, लेकिन स्टार्ट और एंड टैग के बजाय, एक स्टार्ट आईडी, लंबाई और फिर डेटा है। मैं इसे कम बिजली के अनुप्रयोग में बाहरी फ्लैश में लिख रहा हूं, इसलिए मैं फ्लैश एक्सेस को न्यूनतम रखना चाहता हूं। मेमोरी भी सीमित है, क्योंकि कुछ भी कभी भी आसान नहीं है।
जब मैं पूरे ईबीएमएल तत्व को स्मृति में रख सकता हूं, तो इसे बनाना आसान है क्योंकि मैं वापस जाने के बाद प्रत्येक तत्व की लंबाई में भर सकता हूं क्योंकि मुझे पता है कि लंबाई क्या है। समस्या यह है कि क्या करना है जब मैं पूरे तत्व को स्मृति में नहीं रख सकता। मेरे द्वारा देखे जाने वाले विकल्प हैं:
- जो मैं जानता हूं उसे लिखें, फिर वापस जाएं और लंबाई में जोड़ दें (सबसे आसान, लेकिन मैं चाहता हूं कि अधिक फ्लैश एक्सेस जोड़ता है)
- प्रत्येक तत्व की लंबाई की गणना करें इससे पहले कि मैं इसे लिखना शुरू कर दूं (अपेक्षाकृत आसान, लेकिन बहुत प्रोसेसर समय)
- एक बार मेरी मेमोरी को भरने के लिए मोड स्विच करें, ताकि मैं फिर डेटा के माध्यम से जारी रखूं, लेकिन केवल पहले से ही मेमोरी में आरक्षित तत्वों के लिए लंबाई की गणना करने के लिए। फिर याद रखें कि मेरे पास क्या है, और वापस जाएं और उस डेटा को संसाधित करना जारी रखें जहां से मैंने छोड़ा था। (मेरा अब तक का पसंदीदा विकल्प)
- तत्वों को एक अधिकतम या सबसे खराब स्थिति दें जब उन्हें लिखने की आवश्यकता हो और उनकी अंतिम लंबाई अभी तक ज्ञात नहीं है। (ऊपर की तुलना में आसान है, लेकिन बैकफ़ायर और बेकार जगह)
प्रश्न: ऐसा लगता है कि यह एक अपेक्षाकृत सामान्य मुद्दा होना चाहिए जिसके बारे में लोगों ने सोचा है। मुझे पता है कि कुछ डेटा पैकेट बनाते समय भी ऐसा हो सकता है। क्या मैं एक बेहतर / अधिक सामान्य / अधिक स्वीकृत तकनीक हूं जो मैं यहां याद कर रहा हूं? या इस मुद्दे के लिए कुछ शर्तें जिन्हें मैं खोज सकता हूं?