قراءة البيانات مباشرة من ملف إلى ذاكرة الوصول العشوائي في C ++

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

  •  23-08-2019
  •  | 
  •  

سؤال

هل هناك طريقة لإقراءة ملف ثنائي مباشرة في ذاكرة الوصول العشوائي؟

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

حاليا أنا أقدم من خلال الملف مع ifstream تحميلها في كتلة RAM (صفيف) 64 بت كتلة من 64 بت كتلة. لكنني أفكر في أن هذا يجب أن تبطئ لأنه يشبه (هنا يأتي تشبيه) باستخدام كشتبان لكفء الماء من كوب (الملف) في إبريق (ذاكرة الوصول العشوائي) بدلا من مجرد التقاط الكأس و البقشيش كامل المحتويات في إبريق في واحد الذهاب.

كقادم جديد نسبي لهذا، قد يكون لدي فكرة خاطئة تماما حول هذا الأمر - أي منطقية سيكون مساعدة كبيرة.

أنا فقط بعد أسرع طريقة للحصول على ملف كبير في ذاكرة الوصول العشوائي.

شكرا

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

المحلول

ما يمنعك من قراءة الملف في تمريرة واحدة؟ هل هو كبير جدا لتناسب الذاكرة؟

يمكنك أيضا استخدام ملف معين، يونيكس: mmap، ويندوز: createfilemaping

نصائح أخرى

أعتقد أن ما تحتاجه هو ملف مخطط الذاكرة, ومع ذلك، يعتمد API على نظام التشغيل الذي تقوم عليه، في UNIX أعتقد أنه mmap ().

mmap يجب أن تعمل من أجلك. معظم التطبيقات لا تقرأ بالفعل الملف حتى تشير إلى صفحات الذاكرة الفعلية، ولكن في أي حال يمكنك الوصول إلى محتويات الملف كما لو كانت في RAM طوال الوقت.

أنت لا تقول أي منهاج أنت عليه، ولكن هذا يبدو وكأنه وظيفة لملفات المعينة بالذاكرة.

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

لست متأكدا مما إذا كان هذا هو ما تسطيه، ولكن لتسريع القراءة من ملف يمكنك التعامل مع المزيد من بايت. يمكن تعيين الوسيطة الثانية لطريقة قراءة () في FSTREAM لتحديد حجم الإدخال. منحه، على سبيل المثال، قيمة 32 كيلو (32 * 32 (2 ^ 10)) تسريع عملية القراءة. أقترح عليك القيام ببعض المعايير بحجم مخزن مؤقت مختلف.

إذا كنت تقصد "تجنب وضع الملف على المبادلة ووضعها دائما في ذاكرة الوصول العشوائي" أعتقد أنه يمكنك ذلك، لأن هذا شيء يعتني به نظام التشغيل.

انظر إلى مثال المتوقف في DirectX SDK.

يستخدم نهج تعيين الملفات. من الواضح أنه يستخدم تطبيق Windows API، ولكن يمكنك العثور على API المقابلة لمنصات أخرى أيضا.

الشيء المثير للاهتمام هو أنه يوضح لك النهج في السياق. (القراءة / الترحيل في أجزاء نموذج ضخمة (في هذه الحالة التضاريس) عند الطلب

يوفر Boost Support دعم منصة عبر الملفات المعينة بالذاكرة، من بين أشياء أخرى ...

تعزيز الذاكرة المعينة الملفات

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