VS2008|:任务管理器和CRT堆调试器函数之间的内存使用差异
VS2008|: Memory use discrepancy between Task Manager and CRT Heap Debugger functions
我一直在使用各种_CRTMem*函数来尝试查找代码中的内存泄漏。该应用程序是一个非托管的c++应用程序。我注意到一些奇怪的事情:
- 任务管理器(我使用它的"提交大小"度量)报告的内存使用增加与使用CRT堆调试器函数_CrtMemCheckpoint(), _CrtMemDifference()和_CrtMemDumpStatistics()报告的内存使用增加之间存在巨大差异。报告的内存使用增加是200KB(任务管理器)vs 17 KB (CRT堆调试器)。可能是windows在后台分配了额外的内存吗?这似乎是个巨大的差异。
- 我一直在使用_crtdbg_map_alloc#定义和函数_CrtMemDumpAllObjectsSince()来获取内存泄漏文件位置。然而,大约75%的泄漏文件没有文件位置信息。这是否也表明在幕后发生了额外的分配?
我们使用Windows 7进行测试,但最终目标应用程序将在Windows CE下运行。WindowsCE有更好(或不同)的内存管理吗?
有人能帮忙吗?非常感谢,保罗
任务管理器曾经显示真实的数字,但自从Vista(我想)以来,他们改变了它,所以它会报告一个"简化"的报告。这对于严肃的工作是无用的,即使它足以让非技术用户了解他们的系统中发生了什么。
这里有一篇文章描述了一些变化。
如果您想测量内存,请使用perfmon,它带有许多内存计数器之一,或者是进程对象的内存计数器。这些将为您提供所需的原始数据。
相关文章:
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Directx 12 :在两个进程之间共享图形内存
- 如何在窗口之间移动 std::unique_ptr 而不会冒内存泄漏的风险?
- 多个线程之间的获取-释放内存顺序
- 按引用传递和动态内存分配之间的区别是什么
- 在内存使用方面,c++ 中的 map 和 unordered_map 之间有什么区别吗?
- 为什么Valgrind-Massif和最高内存消耗之间会有不同的范围
- VS 2008 和 VS 2017 之间的可视化C++内存管理更改
- 可能的数据竞争在内存中写入相同地址之间
- 使用用户模式和内核之间共享内存的慢速通信
- 两个进程之间的共享映射内存在编辑时未更新
- 内存泄漏,访问释放内存和双重免费之间有什么区别
- C++动态变量和未定义内存之间的差异
- 为什么堆栈中的函数局部变量之间存在内存空间
- 在 C++ 和 C# 之间共享内存映射文件结构
- boost::OSX 上 32 位和 64 位程序之间共享内存中的进程间同步机制(互斥体、条件)
- 与内存之间的未格式化i/o
- 避免在RAM和SWAP内存之间切换的可选实现
- 将16字节和256字节复制到共享内存之间的差异
- 通过new分配内存和分配器分配内存之间的区别是什么