سؤال

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

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

المحلول

أنت محافظ للغاية: يمكن أن يكون ملف معين في الذاكرة أكبر من مساحة العنوان. ال رأي من الملف المعين في الذاكرة محدود عن طريق قيود ذاكرة OS، ولكن هذا فقط جزء من الملف الذي تنظر إليه في وقت واحد. (وأعتقد من الناحية الفنية، يمكنك تعيين طرق عرض متعددة من الأجزاء المتساقطة من الملف مرة واحدة، إلى جانب قيود طول الصفحات والنفقات العامة، إنها فقط مجموع البايتات التي تبحث فيها عن ذلك يطرح حد ممكن. يمكنك إلقاء نظرة على بايت. [0 إلى 1024] والبايت [240 إلى 240 + 1024] مع وجهتين منفصلين.)

في MS نوافذ، انظر إلى mapviewoffile. وظيفة. يستغرق بفعالية إزاحة ملف 64 بت وطول 32 بت.

نصائح أخرى

لقد كانت هذه تجربتي عند استخدام الملفات المعينة بالذاكرة ضمن Win32:

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

إذا كنت تستخدم / 3G التبديل يمكنك الحصول على أكثر من 2 جيجابايت حتى حوالي 2700 ميغابايت ولكن يتم معاقبة أداء نظام التشغيل.

لست متأكدا من 64 بت، لم أحاول ذلك أبدا، لكنني أفترض أن حجم الملف الأقصى الذي يقتصره بعد ذلك بمقدار الذاكرة الفعلية التي لديك.

يجب ألا تكون هناك حدود أخرى. ليست تلك كافية؟ ؛-)

ضمن Windows: "يقتصر حجم عرض الملفات على أكبر كتلة متجاورة متوفرة من الذاكرة الظاهرية غير المحفوظة. هذا على الأكثر 2 غيغابايت ناقص الذاكرة الظاهرية محفوظة بالفعل بواسطة العملية."

من MDSN..

لست متأكدا من Linux / OSX / أي شيء آخر، ولكن من المحتمل أن يرتبط أيضا بمساحة العنوان.

مع فتيل في Linux، يمكنك أيضا إنشاء نظام ملفات في الذاكرة يمتد إلى القرص عند الطلب. لست متأكدا من أن التأهيل كذاكرة قد تم تعيينها، ويتم التمييز نوع من عدم وضوح.

نعم، هناك حدود لملفات المعينة في الذاكرة. الأكثر صدمة:

لا يمكن أن تكون الملفات المعينة في الذاكرة أكبر من 2 جيجابايت على أنظمة 32 بت.

عندما تسبب MemMap في إنشاء ملف أو تمديده خارج نطاقها الحالي في نظام الملفات، فإن محتويات الجزء الجديد غير محدد. على الأنظمة مع دلالات نظام الملفات Posix، سيتم ملء الجزء الموسع مع صفر بايت.

حتى في نظام RAM 64 بت، 32GB، أحصل على الخطأ التالي إذا حاولت أن أقرأ في ملف معين في ذاكرة Numpy واحد بدلا من أخذ أجزاء منه باستخدام BYTE-Offsets:

Overflow Error: memory mapped size must be positive

مجموعات البيانات الكبيرة هي حقا ألم في العمل معها.

دخول ويكيبيديا حول هذا الموضوع:http://en.wikipedia.org/wiki/memory-mapped_file.

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