为什么DestroyWindow()没有释放我代码中的内存?

时间:2015-11-30 13:18:49

标签: c++ windows handle

所以这是我的代码:

#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
}

基本上我只创建一个窗口,然后销毁它。 所以应该释放窗口分配的所有内存, 但我的记忆看起来像这样 - &gt; http://oi67.tinypic.com/2rwrsxc.jpg 它不会被完全删除,我也不知道为什么。

如果你能帮我解决这个问题,我真的很开心。

来自链接的图片:

enter image description here

2 个答案:

答案 0 :(得分:3)

您正在查看两个不同的数字。 DestroyWindow释放内存,但不直接返回操作系统。它仍可供您的计划使用。实际上,这意味着下一次 CreateWindow调用不会增加内存消耗,因为它会回收内存。

答案 1 :(得分:1)

虽然内存使用不一定是一个很好的衡量标准,但单个版本释放足够的连续VM空间以使其值得将其返回到操作系统的可能性绝不好,显示的分配计数应该值得信赖。这里重要的实现细节是在桌面堆中分配窗口。共享堆,由在该桌面上运行的所有进程使用。内存分析器不会跟踪它。

您看到的分配计数增加与创建窗口时发生的其他事件有关。与向消息队列提供消息所需的消息队列一样,它是动态分配的。在所有者线程结束之前它不会被释放。请注意,“队列”的概念只是一个心理模型,实际的实现没有记录,而且涉及的更多。不仅仅是一次分配。

永远不要担心您无法控制的内存使用情况。可以信任操作系统不会发生泄漏。