- 主题:Windows会假装释放内存?
搜一下working set,windows上这个东西会决定进程的真正内存占用
那些所谓的清理内存工具,都是把working set给搞成0
--
修改:z16166 FROM 114.240.244.*
FROM 114.240.244.*
如果和vc的debug/release模式相关,说明是CRT里的代码控制的吧?跟OS没关系
【 在 bn95 的大作中提到: 】
: 补充下:
: 1 delete后不只是不立即释放的问题,而是不管多久都不会释放,除非其他进程导致物理内存吃紧了,才会逐步释放,而且这个释放只是将物理内存转到缓存,其提交大小不会变化,所以算不上真正的释放。
: 2 VS调试模式下,delete后是立即释放的,VS和任务管理器上都是显示的实时的真实的内存占用。
: ...................
--
FROM 114.240.244.*
_NORMAL_BLOCK、_CRT_BLOCK应该不会影响到从任务管理器里看到的内存占用
https://learn.microsoft.com/en-us/cpp/c-runtime-library/crt-debug-heap-details?view=msvc-170
VirtualAlloc/VirtualFree会影响。HeapAlloc/HeapFree最终应该也是调用的VirtualAlloc/VirtualFree
【 在 bn95 的大作中提到: 】
: 你说的有道理
: _NORMAL_BLOCK 由程序直接分配的内存
: _CRT_BLOCK 由运行时刻函数库内部分配的内存
: ...................
--
FROM 114.240.244.*
CRT的源码是可以进去调试的
【 在 bn95 的大作中提到: 】
: 是的,那是随便复制来的,没细看。但是debug和release的内存分配释放很不一样,debug不会出现假释放的情况,目前我也没搞明白为什么这样,CRT库无法进去调试。
: 微软的文档也说了,HeapFree也不能保证内存真正的释放(也就是说即使你释放了,系统还是会给你预留着,准备给你下次再用),要想真正完全控制内存,唯有使用VirtualAlloc和 VirtualFree,这时候,提交大小和你真正使用的内存才是一致的。
:
--
FROM 114.240.244.*