سؤال

أود أن أعرف الطريقة التي ينصح على ويندوز البرمجة C:استخدام malloc أو Win32 HeapAlloc (ربما وزر الفأرة?) وظيفة.

لقد قرأت MSDN وظائف إدارة الذاكرة المادة MSDN المواد المتعلقة malloc و HeapAlloc, ولكنها لا أقول أي واحد يجب أن تستخدم في حالات ما.

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

المحلول

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

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

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

نصائح أخرى

وزر الفأرة الأصدقاء يمكن أن تعطيك قليلا من الحافة إذا كان لديك أكوام من البيانات العملية أو إذا كنت بحاجة إلى الذهاب إلى عناء إنشاء الخاصة بك إدارة الذاكرة على أي حال.

وإلا فإنه من السهل وبالطبع المحمولة أكثر من مجرد استخدام malloc().

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

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

أكثر شيء واحد:malloc() هو ضمان أن يكون المحمولة (على الأقل إلى أي ANSI-C التنفيذ) و أكثر أناقة.

في بعض الحالات باستخدام وظائف مثل HeapAlloc, HeapFree سوف تجعل حياتك أسهل.ومن الأمثلة على ذلك:كبير التطبيق حيث كنت في حاجة إلى تخصيص الذاكرة في وحدة واحدة (القول في library1.dll) مجانا تلك الذاكرة في وحدة رئيسية (أقول program.exe).هذا يمكن أن يتم بأمان إذا كنت تستخدم HeapAlloc, HeapResize و HeapFree الوظائف ، ولكن لا يمكن أن يتم استخدام مكتبة وقت تشغيل C (على سبيل المثال malloc, حر, تغيير الحجم).

ولكن:إذا لم يكن لديك سبب وجيه ، يجب أن العصا مع malloc/مجانا/تغيير حجم الوظائف.أيضا, إذا كنت بحاجة إلى تغيير permisions من الذاكرة المخصصة (على سبيل المثال:لجعل إذا قابل للتنفيذ ، إلخ) ، يجب استخدام وظائف مثل وزر الفأرة, VirtualFree.

هل يمكن جعل المجمع وترك الخيار لتغيير تفاصيل التنفيذ.حتى يمكن مقارنة كل الخيارات مع التعليمات البرمجية الخاصة بك ومن ثم تقرر.

على عكس روب ذهبت في الاتجاه الآخر...منذ أن اختار أن قانون ضد WinAPI, يمكنني استخدام وظائف الأم بدلا من وقت التشغيل C تلك التي هي مجرد غلاف رقيق حول لهم على أي حال.

مع HeapAlloc هل يمكن أن يكون أكوام منفصلة لمختلف المهام/الفرعية.هذا قد تبسيط تحليل تفريغ التطبيقات الكبيرة.

مع malloc يمكنك فقط استخدام كومة واحدة ، ولكن يمكنك الحصول على تخصيص بعض التحسينات التي CRT الكتاب قد نفذت على رأس نظام التشغيل HeapAlloc.

ذاهب إلى وزر الفأرة لا تشتري الكثير إلا إذا كنت ترغب في تنفيذ مخصصة إدارة كومة الذاكرة المؤقتة (مجموعة خاصة بك من كومة* وظائف).

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