MSVCRT: استخدام الذاكرة يذهب برية ، ولكن ليس تحت تصحيح الأخطاء

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

سؤال

لدي رمز C ++ تم تجميعه باستخدام برنامج التحويل البرمجي Intel ، 32 بت ، في وضع MS VC6 ، لذلك باستخدام إما msvcrt.dll أو msvcrtd.dll. هذه العملية تجعل تخصيص الذاكرة الثقيلة وتخصيصها. أراقب استخدام الذاكرة مع WMI وألقي نظرة على الحجم الافتراضي و WorkSetSetsize.

مع وقت تشغيل التصحيح (MSVCRTD.DLL): ثابت افتراضي 1.7 جيجابايت ، يعمل ثابت 1.2 جيجابايت
مع وقت تشغيل غير Debug (MSVCRT.DLL): رفع الافتراضي 1.7-- 2.1 جيجابايت, ، العمل رفع 1.2-1.4 جيجا بايت
مع وقت تشغيل غير Debug ولكن تحت تصحيح الأخطاء (WindBG): ثابت افتراضي 1.7 جيجابايت ، العمل ثابت

عند 2.1 جيجابايت ، تعطل العملية (كما هو متوقع). ولكن لماذا يزداد الاستخدام الظاهري فقط مع (غير Debug) MSVCRT.DLL وفقط إذا لم يكن تحت تصحيح الأخطاء؟ في جميع الحالات ، تكون أعلام التجميع متطابقة ، فقط LIBs وقت التشغيل مختلف.

لا يوجد حل صحيح

نصائح أخرى

غالبًا ما تكون المشكلة غير مؤهلة المتغيرات المحلية التي يتم إلغاءها بواسطة Debug RTL ، ولكن ليس عند استخدام RTL الإصدار. القي نظرة على "البقاء على قيد الحياة نسخة الإصدار" ومعرفة ما إذا كان هذا يساعد.

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