سؤال

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

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

المحلول

على افتراض أن البيانات تأتي من ملف ، فأنت أفضل من تحديد هذا الملف. خلاف ذلك ، فإن ما ينتهي بك الأمر هو تخصيص صفيفك ، ثم نسخ البيانات من ملفك إلى المصفوفة - وبما أن صفيفك يتم تعيينه إلى ملف الصفحة ، فأنت تقوم فقط بنسخ الملف الأصلي إلى ملف الصفحة ، وفي العملية التي تلوث "ذاكرة التخزين المؤقت" (أي الذاكرة المادية) ، فإن البيانات الأخرى النشطة حاليًا لديها فرصة أفضل بكثير لإلغاء. بعد ذلك ، عندما تنتهي (عادةً) اكتب البيانات مرة أخرى من الصفيف إلى الملف الأصلي ، مما يعني (في هذه الحالة) النسخ من ملف الصفحة مرة أخرى إلى الملف الأصلي.

قم بتخريب الملف بدلاً من ذلك ، فقط يقوم بإنشاء بعض مساحة العنوان ويخطط مباشرة إلى الملف الأصلي بدلاً من ذلك. هذا يتجنب نسخ البيانات من الملف الأصلي إلى ملف الصفحة (والعودة مرة أخرى عند الانتهاء) بالإضافة إلى نقل البيانات مؤقتًا إلى الذاكرة الفعلية في الطريق من الملف الأصلي إلى ملف الصفحة. أكبر فوز ، بالطبع ، هو متى/إذا كانت هناك أجزاء كبيرة من الملف الأصلي لا تستخدمها أبدًا على الإطلاق (وفي هذه الحالة قد لا يتم قراءتها أبدًا في الذاكرة الفعلية على الإطلاق ، على افتراض أن الجزء غير المستخدم هو على الأقل صفحة في الحجم).

نصائح أخرى

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

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