c++ LARGEADDRESSAWARE ध्वज के साथ आवेदन कम आभासी स्मृति प्राप्त हो रही है




memory-management operating-system (2)

मेरे पास एक 32 बिट अनुप्रयोग है जिसमें एक exe और एकाधिक डीएलएस शामिल हैं I EXE / LARGEADDRESSAWARE झंडा सेट के साथ बनाया गया है इसलिए मुझे एक 64 बिट ओएस पर उम्मीद है कि मुझे 4 जीबी उपयोगकर्ता पता स्थान मिलना चाहिए। लेकिन कुछ 64 बिट विन 7 प्रणालियों पर मुझे केवल 2 जीबी उपयोगकर्ता पता स्थान प्राप्त हो रहा है। शारीरिक मेमोरी 8 जीबी है अगर यह मायने रखती है इस व्यवहार के लिए क्या कारण हो सकता है?


MSDN के माध्यम से ब्राउज़ करने के बाद, मुझे निम्न पाया गया:

Http://msdn.microsoft.com/en-us/library/windows/desktop/aa366770(v=vs.85).aspx पर ( MEMORYSTATUSEX लिए पृष्ठ जिसका उपयोग GlobalMemoryStatusEx द्वारा किया जाता है ( http://msdn.microsoft com / en-us / library / windows / desktop / aa366589 (v = vs.85) .aspx )) ullTotalVirtual लिए विवरण है:

यह मान एक x86 प्रोसेसर पर 32-बिट प्रक्रियाओं के लिए लगभग 2 जीबी और 32-बिट प्रक्रियाओं के लिए लगभग 3 जीबी है जो कि 4-गीगाबाइट ट्यूनिंग सक्षम वाले सिस्टम पर बड़े पते को परिचित हैं।

4 जीबी ट्यूनिंग पेज है: http://msdn.microsoft.com/en-us/library/windows/desktop/bb613473(v=vs.85).aspx और ऐसा कुछ कहता है:

विंडोज के 64-बिट संस्करणों पर, IMAGE_FILE_LARGE_ADDRESS_AWARE ध्वज के साथ चिह्नित 32-बिट अनुप्रयोगों में 4 जीबी पता स्थान उपलब्ध है

विंडोज सर्वर 2003 के इटालियन संस्करण: SP1 से पहले, 32-बिट प्रक्रियाओं में केवल 2 जीबी का पता स्थान उपलब्ध है।

साथ ही, मेमोरी सीमाएं पृष्ठ ( http://msdn.microsoft.com/en-us/library/aa366778.aspx#memory_limits ) आसान हो सकता है अगर आप अपनी मेमोरी की कुल स्मृति का निर्धारण करना चाहते हैं

हालांकि असली उपयोगी जानकारी मार्क रसिनोविच के ब्लॉग से आती है: http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx

जबकि 4 जीबी 32-बिट क्लाइंट SKU के लिए लाइसेंस प्राप्त सीमा है, प्रभावी सीमा वास्तव में कम है और सिस्टम के चिपसेट और कनेक्टेड डिवाइसों पर निर्भर होती है। इसका कारण यह है कि शारीरिक पता मैप में केवल राम ही नहीं है, लेकिन डिवाइस स्मृति भी, और x86 और x64 सिस्टम 32-बिट ऑपरेटिंग सिस्टम के साथ संगत रहने के लिए 4 जीबी पता सीमा के नीचे सभी डिवाइस मेमोरी को मैप करते हैं, जो कि कैसे संभाल नहीं पाती 4 जीबी से बड़े पते

तो निष्कर्ष यह है कि हाँ, यह सिस्टम के विन्यास पर निर्भर हो सकता है हो सकता है कि आप अपने प्रश्न को एक तालिका के साथ पूरा कर सकें, प्रत्येक सिस्टम पर मिलने वाली स्मृति की मात्रा और कुछ महत्वपूर्ण सिस्टम कॉन्फ़िगरेशन सेटिंग्स, और इस मामले में हम एक पैटर्न को खोज सकते हैं।


समस्या यह है कि एक आवेदन के लिए पूरी तरह से बड़ा एड्रेस पता होना चाहिए - ताकि संकेतकों को अहस्ताक्षरित के रूप में माना जाए।

यदि हालांकि "कुछ" सिस्टम पर आपके कुछ डीएलएल का उपयोग बड़े एड्रेसवेयर से नहीं होता है तो यह आपके पूरे प्रोग्राम को बड़े पते के बारे में जागरूक नहीं करता है

http://blogs.msdn.com/b/oldnewthing/archive/2010/09/22/10065933.aspx





32bit-64bit