كيف يمكنني إنشاء ملف تم تعيينه للذاكرة بدون ملف دعم على OSX؟

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

سؤال

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

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

هل من الممكن تعيين FD إلى كتلة من البيانات الموجودة فقط ككيان تم تعيينه للذاكرة؟

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

المحلول

يمكنك تركيب أ نظام الملفات المدعوم من الذاكرة: http://lists.apple.com/archives/darwin-kernel/2004/sep/msg00004.html

سيؤدي استخدام هذه الآلية إلى زيادة ضغط الذاكرة على النظام ، وربما سيتم ترسيخه إذا كان ضغط الذاكرة رائعًا بما يكفي. قد يكون من المفيد جعلها خيارًا تكوينًا ، في حالة تفضل المستخدم بتطبيق آخر على الاختيار الأول للذاكرة.

خيار آخر هو الاستخدام مقاطع الذاكرة المشتركة بين Posix: http://opengroup.org/onlinepubs/007908799/xsh/shm_open.html (لم أستخدم مقاطع الذاكرة المشتركة بين Posix بنفسي ؛ إذا فهمتها بشكل صحيح ، فقد تم تصميمها لحل هذه المشكلة بالضبط.)

ال shm_open() تقوم الدالة بإنشاء كائن ذاكرة وإرجاع واصف ملف. يمكنك بعد ذلك mmap(2) واصف الملف هذا ، قم بعمل عملك ، وقم بتمرير واصف الملف إلى المكتبة.

لا تنسى shm_unlink الكائن عند الانتهاء ؛ لا تختفي شرائح الذاكرة المشتركة Posix وقوائم الرسائل ومصفوفات الإشارة إلى التلقائي عندما تخرج العملية الأخيرة.

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