बुनियादी सवाल हो सकता है इस तरह से उत्तर नहीं दिया गया है कि एक नए फर्थ उपयोगकर्ता की आवश्यकता होगी ताकि मैं इसमें भाग ले सकूं।
फोर्थ में मेमोरी बहुत लक्षित निर्भर हो सकती है, इसलिए मैं विवरण को सबसे सरल मॉडल तक सीमित कर दूंगा, जो कि एक फ्लैट मेमोरी स्पेस है, जहां कोड और डेटा खुशी से रहते हैं। (खंडित मेमोरी मॉडल के विपरीत, या डेटा या अन्य जटिल मॉडल के लिए कोड और रैम के लिए फ्लैश स्मृति)
शब्दकोश आमतौर पर स्मृति के नीचे शुरू होता है और फर्थ सिस्टम द्वारा ऊपर आवंटित किया जाता है। एक साधारण प्रणाली में दो ढेर उच्च स्मृति में मौजूद होंगे और आम तौर पर उनके पास दो सीपीयू रजिस्ट्रार होते हैं। (बहुत सिस्टम निर्भर)
सबसे मौलिक स्तर पर, स्मृति पॉइंटर चर के मूल्य को बदलकर स्मृति आवंटित की जाती है। (कभी-कभी डीपी कहा जाता है)
प्रोग्रामर आमतौर पर इस चर को सीधे एक्सेस नहीं करता है बल्कि इसे नियंत्रित करने के लिए कुछ उच्च स्तरीय शब्दों का उपयोग करता है।
जैसा कि उल्लेख किया गया है कि फर्थ शब्द 'यहां' शब्दकोष में अगला उपलब्ध पता देता है। इसका उल्लेख नहीं किया गया था कि वेरिएबल डीपी के मूल्य को लाकर यहां परिभाषित किया गया है। (सिस्टम यहाँ वर्णन के लिए dependancy लेकिन उपयोगी)
आगे में 'यहाँ' इस प्रकार दिखाई देंगे:
: यहां (- addr) डीपी @;
यही है।
कुछ स्मृति आवंटित करने के लिए हमें ऊपर की ओर बढ़ने की जरूरत है और हम इसे 'ऑलॉट' शब्द के साथ करते हैं।
'ऑलॉट' के लिए फर्थ परिभाषा बस पैरामीटर स्टैक से एक संख्या लेती है और इसे डीपी में मान में जोड़ती है। तो यह
: ऑलॉट (एन -) डीपी + से अधिक कुछ भी नहीं है! ; \ '+!' सामग्री वैरिएबल डीपी
ऑलोट का उपयोग फोर्थ सिस्टम द्वारा किया जाता है जब हम एक नई परिभाषा बनाते हैं ताकि हमने जो कुछ बनाया है वह सुरक्षित रूप से 'आवंटित' स्मृति के अंदर है।
कुछ ऐसा जो तुरंत स्पष्ट नहीं है वह है कि ऑलोट नकारात्मक संख्या ले सकता है, इसलिए शब्दकोश सूचक को ऊपर या नीचे ले जाना संभव है। तो अगर आप कुछ स्मृति को आबंटित और इसे इस तरह वापसी कर सकते हैं:
हेक्स 100 आवंटित
और मुक्त इसे इस तरह:
हेक्स -100 आवंटित
यह सब कहना है कि यह है एक फर्थ सिस्टम में स्मृति प्रबंधन का सबसे सरल रूप। इसका उपयोग कैसे किया जाता है इसका एक उदाहरण 'बफर' शब्द की परिभाषा में देखा जा सकता है:
: बफर: (एन -) ऑलोट बनाएं;
'बफर:' शब्दकोष में नया नाम बनाता है (नाम से स्थान के लिए जगह बनाने के लिए आवंटित करता है) तो नाम के बाद मेमोरी के सभी बाइट्स और सभी संबंधित हाउसकीपिंग बाइट्स आपके फर्थ सिस्टम को बाइट कर सकता है
का उपयोग तो अब नामित स्मृति का एक ब्लॉक आवंटित करने के लिए हम सिर्फ टाइप करें:
मार्कर foo \ निशान जहां स्मृति अभी समाप्त होता है
हेक्स 2000 बफर: IN_BUFFER
अब हम एक 8K है बाइट बफर सी सहयोगी IN_BUFFER। यदि मानक फर्थ में उस जगह को पुनः प्राप्त करना चाहते हैं तो हम फूथ सिस्टम से खाद्य को हटा दिए जाने के बाद 'फूड' और शब्दकोश में आवंटित सब कुछ टाइप कर सकते हैं।
लेकिन यदि आप अस्थायी मेमोरी स्पेस चाहते हैं, तो यहां 'सब कुछ' का उपयोग करने के लिए स्वतंत्र है!
तो आप बस एक पते को इंगित और इसका इस्तेमाल करते हैं अगर आप इस तरह करना चाहते हैं कर सकते हैं
: MyMemory यहां 200 +; \ यहाँ ऊपर अन-आबंटित स्मृति को MyMemory अंक
\ MYMEMORY moves with HERE. be aware.
MyMemory हेक्स 1000 मिटा \ शून्य
आगे की 2K बाइट्स के साथ इसे भरने आम तौर पर उच्च प्रदर्शन एम्बेडेड अनुप्रयोगों के लिए इस्तेमाल किया गया है जहां गतिशील स्मृति आवंटन संयुक्त राष्ट्र पैदा कर सकता है -एलएलईएल कोड इतना ऑलॉट का उपयोग कर स्थिर आवंटन को प्राथमिकता दी गई थी। हालांकि बड़ा प्रणाली एक ढेर है और आवंटित, मुफ्त का उपयोग आकार बदलने के बहुत पसंद उपयोग हम malloc आदि सी
में
बीएफ
यह बहुत देर हो सकता है ... क्या आप '> लिंक' शब्द के उद्देश्य को समझाते हैं? –
क्षमा करें -> लिंक एक एक्सेसर है जो पॉइंटर से "विपक्ष सेल" (एलआईएसपी से एक शब्द उधार लेने के लिए) "अगली" पॉइंटर के पते पर जाता है। इसे नो-ओपी के रूप में कार्यान्वित किया गया है क्योंकि इस कार्यान्वयन में, "अगला" पॉइंटर कंस सेल में संग्रहीत पहली चीज़ है। –