解除分配不会释放Windows/C++应用程序中的内存

Pau*_*mer 3 c++ windows winapi memory-leaks memory-management

我的Windows/C++应用程序在内存中为操作员分配~1Gb的数据new并处理这些数据.处理完数据后删除.

我注意到如果我在没有退出应用程序的情况下再次运行处理,则第二次调用运算符new来分配〜1Gb的数据失败.

我希望Windows能够提供内存.使用其他一些Win32调用等可以更好地管理吗?

sch*_*der 6

我不认为这是一个Windows问题.检查您是否正确使用了删除或删除[].如果您发布分配/释放内存的代码,也许会有所帮助.


Dio*_*lis 5

在大多数运行时环境中,从操作系统分配给应用程序的内存仍保留在应用程序中,并且很少返回到操作系统.释放内存块允许您从应用程序中重用该块,但不会将其释放到操作系统以使其可供其他应用程序使用.

Microsoft的C运行时库尝试通过调用_heapmin_region调用_heap_free_region或_free_partial_region将内存返回给操作系统,调用VirtualFree将数据释放到操作系统.但是,如果相应区域中的整个页面不为空,则不会释放它们.其常见原因是C++容器的簿记信息和存储缓存.