طريقة محمولة للكشف عن تجزئة الكومة في C ++ في وقت التشغيل؟

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

سؤال

أنا أكتب تطبيقا C ++ مقرها QT ويحتاج إلى أن أكون قادرا على اكتشاف تجزئة الذاكرة من أجل التحقق مما إذا كان النظام الحالي يمكن أن يحافظ بالفعل على تحميل الذاكرة: تحميل البرنامج صورة كبيرة (15/21 ميجابكسل هي القاعدة) في الذاكرة ثم قم بإجراء بعض التصفية على ذلك (ث / مصفوفات متقطعة). على سبيل المثال، أعاني مشكلة تجزئة الذاكرة في Windows و VMMAP كانت مفيدة للغاية في هذا: المشكلة كانت بعض DLLS (WACOM Tablet "WinTab32.dll" و "تطبيق UltraMon") لا يتم نقلها، وكذلك تقسيم مساحة العنوان في 0x10000000-0x30000000 VA من العملية.

أريد أن أقدم الطلب مع نوع من الوعي باتجاه مشكلة التفتت وتتساءل عما إذا كان نهج العرض الأساسي (Linux / Mac / Win32) الذي يعطي معلومات VMMAP بالفعل.

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

المحلول

إجابة قصيرة: لا توجد طريقة محمولة.

إجابة أطول: كيف يتم تنفيذ كومة الكومة وكيف يعمل عبارة عن تفاصيل تنفيذ لتنفيذك يختلف على نطاق واسع بين المنصات ومكتبات STD وأنظمة التشغيل. سيكون عليك إنشاء إصدار مختلف لكل تطبيق - المقدمة، يمنحك التنفيذ واجهة برمجة تطبيقات واجهة برمجة تطبيقات. (أي أظن يجب أن يكون الحال بالنسبة للمنصات الثلاثة التي تستهدفها.)

نصائح أخرى

أعتقد أنك متشائم بشكل مفرط. 21 ميجابكسل، حتى على افتراض كولورب من 16 بت وسيأخذ ألفاشانيل على قدم المساواة 168 ميغابايت فقط. يتم قياس مساحة العنوان المتاحة على نظام 32 بت في غيغابايت.

هل سيفعل هذا ما تحتاجه؟

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top