2011-02-08 14 views
5

प्रश्न यह सब कहता है। मेरे पास एक डेटा संरचना है जो मैं कमजोर हैशटेबल की वजह से मार्शल नहीं कर सकता .. सोच रहा हूं कि क्या मैं इससे छुटकारा पा सकता हूं :)कमजोर सरणी कैसे उपयोग की जाती हैं?

उत्तर

10

एक कमजोर सरणी कमजोर पॉइंटर्स की एक सरणी है। एक कमजोर सूचक एक मूल्य पर एक संदर्भ है जो कचरा इकट्ठा किया जा सकता है।

यदि आप किसी मूल्य पर नियमित सूचक का उपयोग करते हैं तो आप अपने कचरा संग्रह को तब तक रोक देंगे जब तक रेफरी स्वयं कचरा एकत्र नहीं हो जाता है। एक कमजोर संदर्भ के साथ मूल्य रेफरी से पहले एकत्र किया जा सकता है।

उपयोग का एक उदाहरण एक स्रोत है जो एकाधिक सिंकों को डेटा खिलाता है। यदि स्रोत सिंक को नियमित पॉइंटर्स रखता है, जब भी एक सिंक की आवश्यकता नहीं होती है, तब तक यह कचरा नहीं होगा जब तक कि स्रोत न हो (जो उदाहरण के लिए कभी नहीं हो सकता है)। यदि स्रोत सिंक के कमजोर संदर्भों का उपयोग करता है, तो दिए गए सिंक स्रोत से पहले कचरा एकत्र हो सकते हैं।

एक और उदाहरण है एक प्रकार के लिए हैशकंसिंग जो कमजोर हैशटेबल्स (जिसमें कमजोर सरणी शामिल है) का उपयोग करता है। जल्दी ही, हैशकंसिंग एक दिए गए प्रकार के सभी मूल्यों को याद रखने का एक तरीका है जो प्रोग्राम में बनाए और रह रहे हैं। उचित मूल्य कन्स्ट्रक्टर के साथ यह इस प्रकार के मूल्यों के अधिकतम साझाकरण को सुनिश्चित कर सकता है और उस प्रकार पर संरचनात्मक समानता को शारीरिक समानता के रूप में लागू करने की अनुमति देता है। उस स्थिति में यदि एक गैर-कमजोर हैशटेबल का उपयोग किया जाता है, तो कार्यक्रम द्वारा अब उपयोग किए जाने वाले मूल्य कभी कचरा एकत्र नहीं किया जाएगा।

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

+0

बहुत अच्छा जवाब, धन्यवाद !! – Yttrill

1

मार्शल मॉड्यूल के साथ संगत है जो आपके डेटा संरचना और इसके संरचनात्मक रूप से अनुकूल प्रतिनिधित्व के बीच मानचित्र कार्यों की एक पूर्वाग्रह जोड़ी का उपयोग करें।

+0

मैं आपको जेम्स के साथ एक टिक भी नहीं दे सकता, हालांकि मैं चाहूंगा। अगला देखें .. – Yttrill

+0

समस्या यह ओसीएस योजना के लिए एक प्रतीक तालिका है, सहेजने से पहले स्पष्ट चीज एस-अभिव्यक्ति है। समस्या यह है कि "सेव" डिप्जन का हिस्सा है, एक automaton बचा रहा है, और मैं आसानी से संकलित योजना को automaton से डिस्कनेक्ट नहीं कर सकता। – Yttrill

+0

असल में मैं इसे प्रत्येक पार्सर एक्शन को एक पूर्णांक असाइन करके, इसे सहेज कर, और संकलन से पहले एस-एक्सप्रेशन को अलग से सहेज कर ऐसा कर सकता था। लेकिन फिर मुझे समस्या है: जब भी उत्पादन कम हो जाता है, तो मैं स्कीम कोड को पुन: संकलित करने से कैसे बचूं? – Yttrill

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