加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何找出记忆的去向

发布时间:2020-12-14 18:01:24 所属栏目:百科 来源:网络整理
导读:我有这种情况,加载和关闭文档的周期吃了几Mb的RAM.当应用程序退出时,此内存不会被泄漏,因为它拥有它并清理它(Visual Leak Detector和Mac Leak工具就此达成一致).但是,我想知道它的发展方向.我假设它是应用程序中的某种缓存,当文档加载时会填充,但在文档关闭
我有这种情况,加载和关闭文档的周期吃了几Mb的RAM.当应用程序退出时,此内存不会被泄漏,因为它拥有它并清理它(Visual Leak Detector和Mac Leak工具就此达成一致).但是,我想知道它的发展方向.我假设它是应用程序中的某种缓存,当文档加载时会填充,但在文档关闭时不会释放.我可以使用哪些方法或工具来确定这些分配的位置?

更新:

在Hans的帖子后,我在应用程序中添加了一个循环,以反复打开和关闭文档.我发现在加载前几个文档后,内存使用率(Process Explorer报告的“Private Bytes”)有一个初始跳跃,但之后它不再增加.因此,这表明没有新的分配,而明显的增加可能主要是由于寻呼的假象.

我还仔细研究了Mac上的Instruments,这对于查看分配发生的位置非常有用:创建一个由Allocations和Leaks工具组成的工具,然后在周期的开始和结束时添加堆快照,并在快照列表它将显示相对于上一个快照的所有分配增量.这表明在Mac上,内存分配正在增加,但这是由于CoreGraphics绘图等内部缓存,我们几乎无法控制.

解决方法

假设它实际上是你测量过的RAM:确定这是完全正常的.您的程序在加载文档时正在主动寻址虚拟内存页面,它们将被映射到RAM.他们将留在那里,直到另一个进程需要将页面映射到RAM.有些操作系统会先在 Windows上修剪工作集,例如当应用程序的窗口最小化时.

如果它实际上是你测量的虚拟内存页面:这也是正常的.释放内存后,堆块将添加到空闲块列表中,准备好由下一个内存分配使用.如果释放内存恰好释放整个页面范围,那么内存管理器就有机会取消映射该范围.它并不经常发生,它的内存管理器的实现细节是多么积极地这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读