كيف يمكنني إنشاء ملف تم تعيينه للذاكرة بدون ملف دعم على OSX؟
-
26-09-2019 - |
سؤال
أريد استخدام مكتبة تستخدم واصفات الملفات كوسيلة أساسية للوصول إلى بياناتها. لأسباب في الأداء ، لا أريد أن أضطر إلى إلزام الملفات بالقرص لكل منها قبل استخدام وظائف هذه المكتبة.
أرغب في إنشاء نقط بيانات (كبيرة) أثناء الطيران ، والاتصال بالمكتبة لإرسالها إلى خادم. كما هو الحال ، يجب أن أكتب الملف لقرصه ، وفتحه ، ونقل 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 وقوائم الرسائل ومصفوفات الإشارة إلى التلقائي عندما تخرج العملية الأخيرة.