2013-06-29 7 views
5

नोड.जेएस के संदर्भ में, मैं अक्सर आरएसएस मेमोरी के उल्लेखों में आता हूं। Wikipedia article on RSS सुंदर terse है और मैं अभी भी बिल्कुल अनिश्चित हूँ कि यह ढेर स्मृति से अलग कैसे है। क्या यह ढेर + ढेर है? क्या कोई मुझे यह बता सकता है कि मैं 5 साल का था?आरएसएस और ढेर के बीच क्या अंतर है?

उत्तर

3

आम तौर पर, कौन सा अनुप्रयोग स्तर प्रोग्रामर मेमोरी कॉल करता है वास्तव में केवल एक पता स्थान है। तो ढेर, ढेर, यहां तक ​​कि कार्यक्रम खंड भी पते के सेट हैं। नोड में शामिल हमारे कार्यक्रम, उन पते का उपयोग कर डेटा पढ़ और लिखते हैं। हम मॉलोक जैसी चीज़ों को "मेमोरी मैनेजर" कहते हैं लेकिन यह वास्तव में "पता प्रबंधक" होना चाहिए। एक अलग "वर्चुअल मेमोरी" प्रणाली यह निर्धारित करती है कि उन एड्रेस सेट को रैम, डिस्क या कुछ भी मैप नहीं किया गया है या नहीं। निवासी सेट उन पते हैं जो रैम द्वारा समर्थित हैं। निवासी सेट आकार बस सेट कितना बड़ा है।

7

ऑपरेटिंग सिस्टम द्वारा चलाने के लिए एक प्रक्रिया को स्मृति दी जाती है। आधुनिक 32 बिट और 64 बिट सिस्टम पर, यह मेमोरी स्पेस सभी संभावित मेमोरी पतों के विस्तृत खुले मैदान की तरह दिखता है जिन्हें संबोधित किया जा सकता है। हकीकत में, ऑपरेटिंग सिस्टम प्रक्रिया के लिए "झूठ बोल रहा है", और अक्सर इस प्रतिबद्धता को स्मृति के केवल एक हिस्से के साथ वापस कर सकता है जिसे संभावित रूप से प्रक्रिया द्वारा संबोधित किया जा सकता है। बाकी "आभासी" है।

चूंकि सीपीयू केवल रैम में डेटा और कोड से निष्पादित कर सकता है, ओएस सीपीयू के साथ काम करता है ताकि ट्रैक का उपयोग किया जा सके कि प्रोग्राम किस स्मृति का उपयोग कर रहा है, डिस्क में है और डिस्क पर एक विशेष फ़ाइल में सहेजा गया है वर्चुअल रैम (यानी पेजफाइल/स्वैपफ़ाइल)। रैम में क्या है "निवासी" या "कामकाजी" सेट कहा जाता है।

डेवलपर के रूप में जानना महत्वपूर्ण है क्योंकि यह पहले से ही रैम में मौजूद स्मृति तक पहुंचने के लिए लेता है, इसलिए ओएस को डिस्क से मेमोरी को पहले रैम में लोड करना पड़ता है। महत्वपूर्ण डेटा निवासी रखने वाले प्रोग्रामिंग प्रोग्राम में उन कार्यक्रमों की तुलना में अधिक प्रदर्शन विशेषताएं होती हैं जो स्मृति आवंटित और एक्सेस किए जाने के बारे में लापरवाह हैं।

ढेर ओपन मेमोरी की विभाजन है जो ओएस एक प्रक्रिया को प्रस्तुत करता है, जिसे data structure bearing the same name में व्यवस्थित किया जाता है। प्रक्रिया इस संगठन का उपयोग करती है क्योंकि यह एक समय में केवल छोटे हिस्सों तक पहुंचने के लिए निष्पादित होती है (और बाद में रिलीज के लिए ट्रैक)। उदाहरण के लिए यदि प्रक्रिया पूर्णांक की एक सरणी को स्टोर करना चाहता है, तो इसे कई बाइट्स के साथ स्मृति के एक हिस्से की आवश्यकता होती है क्योंकि तत्वों को पूर्णांक के आकार के समय होते हैं।

यह विभाजन स्वैपिंग के साथ ओएस के शीर्ष पर है। मैं रनटाइम पर अपनी ऑब्जेक्ट्स और डेटा स्ट्रक्चर के लिए मेमोरी के बाइट्स के आवंटन को स्टोर करने के लिए ढेर तक पहुंचता हूं, लेकिन यह ढेर आवंटन अभी भी ओएस द्वारा दी गई स्मृति में रहता है, जो इसे 40 9 6 बाइट "पेज" के संदर्भ में देखता है जिसे स्थानांतरित किया जा सकता है डिस्क से पीछे और आगे।

ढेर एक और विशेष डेटा संरचना है जो ओएस एक प्रक्रिया देता है लेकिन यह अलग है कि यह एक ही समय में सभी ढेर हो जाता है, और एक प्रक्रिया के रूप में अनुक्रम में स्टैक पर आइटम डालता है, यह वृद्धि (या कमी) इस स्टैक में कहां है, इसका ट्रैक रखने के लिए विशेष सूचक (आमतौर पर एक विशेष सीपीयू रजिस्टर)। उच्च स्तर पर, प्रत्येक धागा एक ढेर का ट्रैक रखता है और जहां सूचक उस ढेर में होता है। स्थानीय चर, फ़ंक्शन पैरामीटर और रिटर्न पॉइंटर्स यहां संग्रहीत किए जाते हैं और पॉइंटर बढ़ जाता है और इस स्मृति पर कमी आती है क्योंकि प्रक्रिया इन चीजों का ट्रैक रखने के लिए निष्पादित होती है।

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