2013-08-09 5 views
5

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

प्रोग्राम छवियों की एक बड़ी मात्रा को संसाधित करना है और मैं जितना संभव हो उतना संसाधित डेटा रैम में संभालना चाहता हूं। लेकिन मुझे पता चला कि malloc 8 जीबी रैम (विंडोज 7 64-बिट) होने पर भी 2 जीबी से अधिक आवंटित नहीं होगा।

मैं अपने प्रोग्राम को जितना संभव हो उतना रैम उपयोग कर सकता हूं?

+0

यदि आप 64-बिट्स लिनक्स पर स्विच करते हैं तो आप 2 जीबी (शायद लगभग 7 या 8 जीबी) से अधिक 'malloc' करने में सक्षम होंगे। –

+3

याद रखें कि उदा। 'malloc' स्मृति की निरंतर ब्लॉक आवंटित करता है। यह बस हो सकता है कि आपके लिए पर्याप्त कोई ब्लॉक न हो। यह भी याद रखें कि भले ही आपके पास 8 जीबी भौतिक रैम है, फिर भी सभी एप्लिकेशन उस मेमोरी को साझा करते हैं, और जब तक कि आप सभी मेमोरी को लगातार पढ़/लिखते नहीं हैं, तब इसके कुछ हिस्सों को डिस्क पर बदल दिया जा सकता है। –

+3

क्या आप सुनिश्चित हैं कि 64 बिट्स मोड में 64 बिट्स निष्पादन योग्य में आपका प्रोग्राम संकलित किया गया है? –

उत्तर

7

मेरा मानना ​​है कि mmap(2) की खिड़कियों बराबर VirtualAlloc

है यह आपको एक बहुत अधिक स्मृति का उपयोग करने के लिए अनुमति चाहिए। कृपया ध्यान रखें कि ओएस अभी भी आपकी याददाश्त को दूर करने का निर्णय ले सकता है। आप इसे VirtualLock के साथ रैम में लॉक कर सकते हैं। हालांकि लॉक करने योग्य मेमोरी की मात्रा सीमित हो सकती है।

टिप्पणियों में उल्लिखित अनुसार यह सुनिश्चित करें कि आपके प्रोग्राम को 64-बिट के रूप में संकलित करना सुनिश्चित करें।

+0

_ "लॉक करने योग्य मेमोरी की मात्रा सीमित हो सकती है" _ - हाँ, और यह न केवल _may__ लेकिन यह बहुत गंभीरता से सीमित है। डिफ़ॉल्ट, अगर मुझे सही याद है, तो 16 एमआईबी है, जब तक कि आप पहले अपने कामकाजी सेट आकार को समायोजित न करें। – Damon

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

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