2008-12-06 6 views
7

क्या कोई एसएलआर और आरएसएस मूल्यों के अर्थ का कुछ स्पष्ट स्पष्टीकरण दे सकता है जिसे हम सोलारिस में prstat से प्राप्त करते हैं?prstat आउटपुट में SIZE और आरएसएस मानों का अर्थ

मैंने एक परीक्षण सी ++ एप्लिकेशन लिखा जो new[] के साथ मेमोरी आवंटित करता है, इसे भरता है और इसे delete[] से मुक्त करता है।

जैसा कि मैंने समझा, आकार मान को इस प्रक्रिया से कितना वर्चुअल मेमोरी "आरक्षित" किया जाना चाहिए, यह स्मृति "malloced" या "newed" है।

यह स्मृति आरएसएस मूल्य में तब तक नहीं मिलती जब तक कि मैं वास्तव में इसका उपयोग नहीं करता (कुछ मानों को भरता हूं)। लेकिन फिर भी अगर मैं स्मृति मुक्त करता हूं, तो आरएसएस नहीं गिरता है।

मुझे समझ में नहीं आता कि मैं उन 2 मूल्यों को सही ढंग से असाइन कर सकता हूं।

उत्तर

4

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

यदि आप चाहते हैं मुक्त कर दिया स्मृति एक नि: शुल्क के बाद तुरंत वापस किया जाना है, अगर आप इस तरह सोलारिस mmap संभाजक उपयोग कर सकते हैं:

export LD_PRELOAD=libumem.so 
export UMEM_OPTIONS=backend=mmap 
+0

मत भूलना कि हालांकि आवंटन आकार के आधार पर यह सामान्य sbrk में वापस आ जाएगा व्यवहार, यानी मेरे सौर मंडल बॉक्स पर अगर मैं वर्णित हूं और 16k से कम के हिस्सों को आवंटित करता हूं तो यह स्मृति को मुक्त नहीं करेगा, हालांकि यह भाग> 16k पर होगा। – ScaryAardvark

1

आकार, प्रक्रिया की कुल आभासी स्मृति आकार है सभी मैप की गई फ़ाइलों और उपकरणों सहित, और आरएसएस निवासी समूह का आकार और होना चाहिए, लेकिन पूरी तरह से अविश्वसनीय है, आप pmap की जानकारी को प्राप्त करने के लिए प्रयास करना चाहिए

0

एक सामान्य नियम के रूप में एक प्रक्रिया को आवंटित करने के बाद इसे ऑपरेटिंग सिस्टम पर वापस नहीं दिया जाएगा। यूनिक्स सिस्टम पर sbrk() कॉल प्रक्रियाओं का पता लगाने के लिए उपयोग किया जाता है, और दूसरी दिशा में जाने के लिए समान कॉल नहीं है।