Почему DestroyWindow() не освобождает память в моем коде?

Итак, это мой код:

#include <windows.h>
#include <iostream>
using namespace std;

int main(void) {
    cin.get();    //MEMORY SNAP
    HWND win = CreateWindow(
        "static",
        NULL,
        WS_CHILD | WS_VISIBLE | SS_BITMAP | WS_DISABLED,
        NULL,
        NULL,
        NULL,
        NULL,
        GetConsoleWindow(),
        (HMENU)0,
        GetModuleHandle(0),
        NULL
        );
    cin.get();    //MEMORY SNAP
    DestroyWindow(win);
    cin.get();    //MEMORY SNAP
}

в основном я только создаю окно и затем разрушаю его. Таким образом, вся память, выделенная окну, должна быть освобождена, но моя память выглядит следующим образом -> http://oi67.tinypic.com/2rwrsxc.jpg она не будет полностью удалена, и я не знаю почему.

Я был бы очень рад, если бы вы могли помочь мне с этим.


Изображение по ссылке:

2 ответа

Вы смотрите на два разных числа. DestroyWindow освобождает память, но не напрямую обратно в ОС. Это остается доступным для вашей программы. На практике это означает, что следующий CreateWindow вызов не увеличивает потребление памяти, так как он перезагружает память.

Хотя использование памяти не всегда является хорошей мерой, вероятность того, что один выпуск освободит достаточно смежного пространства ВМ, чтобы можно было вернуть его в ОС, никогда не бывает хорошей, отображаемое количество выделенных ресурсов должно быть достоверным. Здесь важна деталь реализации: окна расположены в куче рабочего стола. Общая куча, которая используется всеми процессами, запущенными на этом рабочем столе. Он не отслеживается профилировщиком памяти.

Увеличение количества выделений, которое вы видите, связано с другими вещами, которые происходят при создании окна. Как и очередь сообщений, необходимая для ее доставки, она распределяется динамически. Это не выпущено, пока поток владельца не заканчивается. Остерегайтесь того, что понятие "очередь" - это просто ментальная модель, фактическая реализация недокументирована и гораздо более сложна. Это намного больше, чем просто одно выделение.

Никогда не беспокойтесь об использовании памяти, которое находится вне вашего контроля. ОС можно доверять, чтобы не страдать от утечек.

Другие вопросы по тегам