متى تنفد عملية Windows من الذاكرة؟

تحت Windows Server 2003 ، Enterprise Edition ، SP2 (لم يتم تمكين/3GB)

كما أفهمها ، وربما أكون مخطئا ، فإن الحد الأقصى للذاكرة القابلة للعنونة لعملية ما هو 4GB.

هل هذا هو 2 غيغابايت من وحدات البايت الخاصة و 2 غيغابايت من وحدات البايت الظاهرية؟

هل لديك أخطاء "نفاد الذاكرة" عند بلوغ حد البايت الخاص أو حد البايت الظاهري؟

2

6 إجابة

من الصحيح أن الحد الأقصى لمساحة العنوان في العملية هو 4 غيغابايت ، بمعنى ما. نصف مساحة العنوان ، لكل عملية ، تناولها نظام التشغيل. يمكن تغيير ذلك باستخدام مفتاح 3 جيجا بايت ولكنه قد يتسبب في عدم استقرار النظام. لذا ، فقد تم تركنا مع 2GB من الذاكرة القابلة للعنونة للعملية من تلقاء نفسها. حسنًا ، ليس تمامًا. وتبين أن جزءًا من هذه المساحة مأخوذ بأشياء أخرى مثل DLLs رمزًا شائعًا آخر. الذاكرة الفعلية المتاحة لك كمبرمج هي حول 1.5GB - 1.7GB.

لست متأكدًا من كيفية التعامل مع هذا الخطأ بطريق الخطأ ، لكنني أعرف الألعاب التي تحطمت في خرائط متعددة اللاعبين كبيرة لهذا السبب. شيء آخر يجب ملاحظته هو أن برنامج 32 بت لا يمكن استخدام أكثر من مساحة عنوان 2 غيغابايت على نظام 64 بت إلا إذا كان تمكين علامة رابط/LARGEADDRESSAWARE: YES.

4
وأضاف

الحد الأقصى للذاكرة القابلة للعنونة لجهاز 32 بت هو 4 جيجا ، لآلة 64 بت يمكنك معالجة الأحمال أكثر. (على الرغم من أن بعض الأجهزة 32bit لديها أنظمة تمديد للوصول إلى المزيد ، لكنني لا أعتقد أن هذا الأمر يستحق الاهتمام أو التفكير في الاستخدام).

تخرج من أخطاء الذاكرة عند الوصول إلى الحد الظاهري. في نظام التشغيل Windows Server 2003 ، يخبركم مدير المهام بالحد الأقصى لعلامة التبويب الأداء التي تحمل الاسم "Commit Charge Limit".

0
وأضاف

يشرح الرابط التالي أفضل بكثير من أي وقت مضى:

MSDN - CLR Inside Out: Investigating Memory Issues

0
وأضاف

على 32 بت ، إذا كان هناك ذاكرة فعلية كافية ومساحة قرص للذاكرة الظاهرية ، تنفد الذاكرة حول 3 غيغابايت ، لأن النواة تحتفظ بمساحة العنوان فوق 0xC0000000 لنفسها. على kernel 64 بت تشغيل تطبيق 64 بت ، يكون الحد الأقصى 8 تيرابايت.

For more details, check out MSDN - Memory Limits for Windows Releases

0
وأضاف

Mark Russinovich started a series of posts on this.. Pushing the Limits of Windows: Physical Memory

في حين أن 4 غيغابايت هي الحد المرخص لوحدات تخزين عميل 32 بت ، فإن الحد الفعال هو في الواقع أقل ويعتمد على شرائح النظام والأجهزة المتصلة به. والسبب هو أن خريطة العنوان الفعلية لا تتضمن ذاكرة الوصول العشوائي فحسب ، بل ذاكرة الجهاز أيضًا ، وأنظمة x86 و x64 تقوم بتعيين كل ذاكرة الجهاز دون حدود عنوان 4 جيجابايت لتظل متوافقة مع أنظمة التشغيل 32 بت التي لا تعرف كيفية التعامل معها عناوين أكبر من 4GB. إذا كان النظام يحتوي على 4 غيغابايت من ذاكرة الوصول العشوائي والأجهزة ، مثل محولات الفيديو والصوت والشبكات ، التي تقوم بتطبيق النوافذ في ذاكرة الجهاز الخاصة بهم والتي تصل إلى 500 ميغابايت ، فإن 500 ميغابايت من ذاكرة الوصول العشوائي 4 غيغابايت ستقع فوق حدود العنوان 4 جيجابايت.

0
وأضاف

يمكنك فقط الوصول إلى 2 غيغابايت من الذاكرة في الإجمالي (بدون مفتاح 3Gb) على الأنظمة الأساسية لـ Windows 32 بت.

يمكنك تشغيل العديد من أجهزة VMs 32 بت على نظام تشغيل 64 بت بحيث يكون لكل تطبيق إمكانية الوصول إلى أكبر قدر ممكن من الذاكرة إذا كان جهازك يحتوي على أكثر من 4 جيجابايت.

الكثير من الناس بدأوا للتو في الوصول إلى هذه الحواجز ، أعتقد أنه من الأسهل إذا كان التطبيق الخاص بك في .net أو Java حيث أن VMs تصل إلى 32 جيجا بايت من الذاكرة على نظام 64bit.

0
وأضاف