Logo ar.removalsclassifieds.com

الفرق بين Mmap و Malloc (مع الجدول)

جدول المحتويات:

Anonim

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

Mmap مقابل مالوك

الفرق بين mmap و malloc هو أن وقت تنفيذ mmap أقل بكثير من وقت malloc. Malloc هي واجهة تخصيص الذاكرة الرئيسية بينما ، mmap هو نظام. هذا هو المسؤول عن kernel للبحث عن عناوين كبيرة بما يكفي للسماح بتعيين العديد من الصفحات.

Mmap في الحوسبة هو استدعاء نظام POSIX متعدد المهام يسجل جميع البيانات أو الملفات والأجهزة في ذاكرته. يُعرف هذا أيضًا بالطريقة التي تندرج تحت الملف المعين للذاكرة وتنفذ نسخ البيانات في ذاكرتها الفعلية حيث لا يمكن قراءة المحتوى مباشرة من محرك الأقراص.

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

جدول المقارنة بين Mmap و Malloc

معلمات المقارنة

ممب

مالوك

تعريف يشار إلى Mmap إلى استدعاء نظام يطلب من kernel البحث عن عنوان كبير لتعيين الصفحات. Malloc هي واجهة تخصيص الذاكرة الرئيسية التي تجمع جميع التسهيلات المتاحة في النظام.
دور يستخدم Mmap مفتاح تبديل السياق ويحوله إلى kernelland. يخصص مالوك كتلة الذاكرة في Apile.
يسمى أيضًا باسم يُعرف Mmap أيضًا باسم استدعاء النظام. يُعرف Malloc أيضًا بواجهة تخصيص الذاكرة الرئيسية.
نتائج لا ينتج عن Mmap التأثير على أداء النظام الآخر. يؤدي مالوك إلى عدم التنظيم ويخلق أداء ضعيفًا للنظام.
الأنسب لـ هو الأنسب Mmap لتسريع عملية الردود المقدمة من قبل التطبيقات. يعد Malloc هو الأنسب لتخصيص الذاكرة في أي تطبيق في النظام.

ما هو Mmap؟

يشار إلى Mmap إلى استدعاء نظام Unix متوافق مع POSIX والذي يقوم بتعيين البيانات أو الملف أو الجهاز في الذاكرة. إنها طريقة إدخال وإخراج لتعيين الذاكرة. في عملية الاستدعاء ، يتم إنشاء تعيين جديد في مساحة العنوان الظاهرية. في العنوان. تم العثور على العنوان الأولي للتعيين الجديد ويتم تحديد طول التعيين بواسطة وسيطة الطول (التي يجب أن تكون أكثر من 0).

إذا تم العثور على العنوان ليكون NULL ، يتم اختيار العنوان من قبل kernel ، مما يجعل التعيين ، والذي يعتبر أسهل طريقة لرسم خرائط جديدة. إذا لم يتم العثور على العنوان على أنه NULL ، فإن النواة تعتبره مؤشرًا لوضع التعيين في مكان ما على Linux.

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

ما هو مالوك؟

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

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

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

الاختلافات الرئيسية بين Mmap و Malloc

استنتاج

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

في نقاط معينة ، تتمتع mmap بميزة على malloc حتى الآن ، لا يُنصح بالاختيار أثناء الاختيار بين هذين الأمرين لتخصيص الذاكرة حيث تقوم mmap بتقسيم الذاكرة ومن ثم يتعذر إجراء مكالمة نظام.

مراجع

الفرق بين Mmap و Malloc (مع الجدول)