لا تلمس إجراءات إلغاء تخصيص الذاكرة كتلة يتم تحرير؟

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

سؤال

ويندوز HeapFree، MSVCRT مجانا: أنها لا تسبب الذاكرة أن يطلق سراحه ليتم ترحيلها في؟ واني اسعى الى تقدير إن لم يكن تحرير الذاكرة في الخروج من شأنه تسريع اغلاق التطبيق بشكل كبير.

ملحوظة: هذا سؤال فني معين جدا. انها ليست حول ما إذا كانت التطبيقات ينبغي أو لا ينبغي أن يطلق free في الخروج.

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

المحلول 2

وركضت اختبارا لHeapFree. البرنامج التالي ديه انتهاك وصول داخل HeapFree في الاول = 31999:

#include <windows.h>

int main() {

    HANDLE heap = GetProcessHeap();
    void * bufs[64000];

    // populate heap
    for (unsigned i = 0; i < _countof(bufs); ++i) {
        bufs[i] = HeapAlloc(heap, 0, 4000);
    }

    // protect a block in the "middle"
    DWORD dwOldProtect;
    VirtualProtect(
        bufs[_countof(bufs) / 2], 4000, PAGE_NOACCESS,
        &dwOldProtect);

    // free blocks
    for (unsigned i = 0; i < _countof(bufs); ++i) {
        HeapFree(heap, 0, bufs[i]);
    }
}

ومكدس هو

ntdll.dll!_RtlpCoalesceFreeBlocks@16()  + 0x12b9 bytes  
ntdll.dll!_RtlFreeHeap@12()  + 0x91f bytes  
shutfree.exe!main()  Line 19    C++

وهكذا يبدو أن الجواب هو "نعم" (وهذا ينطبق على free كذلك، لأنه يستخدم HeapFree داخليا)

نصائح أخرى

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

وأنا متأكد تقريبا أن الإجابة على السؤال تحسين سرعة أن يكون "نعم". تحرير كتلة قد تكون أو لا تلمس كتلة الفعلي في السؤال، ولكن سيكون لها بالتأكيد لتحديث المعلومات مسك الدفاتر الأخرى في أي حال. إذا كان لديك zillions من الأجسام الصغيرة المخصصة (يحدث)، ثم الجهد المطلوب لتحرير كل منهم يمكن أن يكون لها تأثير كبير.

إذا يمكن ترتيب ذلك، قد حاولت وضع طلبك مثل أنه إذا كان يعلم انه سيكون لإنهاء، حفظ أي عمل في انتظار (التكوين، وثائق، أيا كان) والخروج ungracefully.

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