![]() |
1
1
setprocessworkingsetsize并不意味着你认为它意味着什么——它只是一个提示,告诉操作系统“在内存中”要保留多少内存,而不是分页到磁盘。现代操作系统在将未使用的内存分页到磁盘时非常激进,尤其是windows。 IBM Rational Purify 是除了非常彻底的代码分析之外的唯一解决方案。在Windows上,对于C/C++,没有更好的工具来查找内存泄漏。在mac或linux上,你可以使用valgrind,但是afaik,它还没有在windows上运行。 |
![]() |
2
1
从您的标签中,您使用的是C++和VisualStudio。 在这种情况下,您可以简单地使用microsoft为您提供的crt调试挂钩。 在msdn中搜索crtsetallochook。 在调试构建中,这将允许拦截每个分配—您可以忽略小的分配,只需在大的分配上设置断点或调用::debug break。 |
![]() |
3
0
1)使用setProcessWorkingSetSize:我已经尝试过了,但是当使用超过150MB时,我的进程很高兴地继续运行: 什么是setprocessworkingsetsize返回?呼叫成功了吗?
2)每次分配超过1MB时设置断点。我该怎么做呢,重载运算符new,里面有一个“if>1MB”?
检查由 C Runtime Debug Heap 由MSVC提供。 |
![]() |
4
0
在一个嵌入式系统上,我们会完全按照您的建议来做——在超过某个阈值的任何new/memalloc调用上中断,在free/delete上也这样做。单调乏味,但它会把工作做完。大小上的条件断点应该可以满足您的要求,但在删除时,情况会更糟。 |
![]() |
5
0
尝试使用 UMDH . 它是一个免费的微软实用程序,允许查找内存泄漏。 |
![]() |
6
0
抱歉,所有建议的解决方案都不起作用。最后通过使用aqtime和大量的调试输出得到了修复。关闭时泄漏得到了清理,所以它在大海捞针。 不过,我还是对如何有效地找到这个感兴趣。我试图在新操作符上设置一个条件断点,但调试器花费了很长时间来计算每个分配的“bytes>1024*1024”。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |