يتجاوز تطبيق C ++ الذاكرة ولكنه لا يستخدم الذاكرة الافتراضية

StackOverflow https://stackoverflow.com/questions/3451765

سؤال

لديّ تطبيق يخصص الذاكرة مع "New" ويحرصهم بـ "Delete" في بعض أجزاء الكود. المشكلة هي أنه كلما تجاوز حد الذاكرة للنظام (دعنا نقول 2GB) ، يرسل Windows إشارة قتل إلى العملية. أعتقد أنه ليس معتادًا لأنه يجب أن يستخدم مساحة المبادلة (أعتقد في Windows أنه يسمى الذاكرة الظاهرية) ، أليس كذلك؟ طلبي مكتوب في C ++/Visual Studio.

هل كانت مفيدة؟

المحلول

إليكم كيف يمكنك أن تصل إلى 3 جيجابايت لعملية ما; ؛ هذا هو الحد الأقصى المطلق الذي يمكنك الحصول عليه لتطبيقات Windows 32 بت. أي أكثر من ذلك وستحتاج إلى استخدام إصدار 64 بت من Windows.

هذا كثير من الذاكرة. ربما يمكنك التفكير في تقسيم التطبيق إلى عمليات متعددة والتواصل بينهما.

نصائح أخرى

نظام التشغيل لا يقتل تطبيقك ، وهو استثناء غير معقول. سترغب في فحص تطبيقك مع Perfmon ، ومشاهدة هذه العدادات ، مجموعة العمل ، وحدات البايت الافتراضية ، وحدات البايت الخاصة. ستحصل على استثناءات عندما تقترب بايتك المحجوزة من 2 جيجابايت. لذا فإن بايتاتك الملتزمة وبايتات ذاكرة الوصول العشوائي أقل بكثير.

فيما يلي مقالة لطيفة حول مساحة العنوان الافتراضي ، بما في ذلك VS المحفوظة.

أخلاقيات القصة ، لا تحاول تخصيص عندما تقترب البايتات المحجوزة من 2 جيجابايت ، لعملية 32 بت.

لا يستخدم Windows الإشارات. يجب أن تحصل على استثناء std :: badalloc عندما تنفد من الذاكرة. والتي ، عندما لا تكون متحللة ، سيتم تشغيل وظيفة inthinate () تلقائيًا. الاستثناء مرئي في نافذة الإخراج.

لم أنظر عن كثب إلى هذا ، لكنك قد تجد الإجابات التي تريدها هنا:

هل يمكنك تخصيص جزء كبير جدًا من الذاكرة (> 4 جيجابايت) في C أو C ++؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top