【发布时间】:2015-04-01 22:04:25
【问题描述】:
所以我在我的程序中运行了一个内存使用测试,其中我将每个元素添加到每个帧的两个单独的向量 (~60fps) 中的 20 个元素。我预计在某个时候我会开始看到内存泄漏,但内存使用量一直保持不变,直到某个临界点。总共有大约 700,000 个元素,它飙升,然后在新的高原再次趋于平稳。
我感觉这与此时自动增加的向量分配有关,但我不确定,也无法在网上找到任何东西。它也不能真正解释为什么当时分配了这么多额外的内存(CPU 上的私有字节从 ~800 跳到 ~900,系统 GPU 内存从 ~20 跳到 ~140)。以下是 CPU 和 GPU 的 Process Explorer 图:
注意:CPU 和 GPU 使用率的下降是因为我在看到峰值后暂停了程序。
谁能给我解释一下?
编辑:这是一个更简单、更通用的测试:
总使用量显然要低很多,但思路相同。
【问题讨论】:
-
如果您确定这不是内存泄漏,那么最好的方法是保留程序可以达到的最大向量。
-
这取决于您测试它的工具,但它可能与您的应用程序分配请求新的内存页面文件有关(因为并非每个分配真的都会改变应用程序的内存大小(以页面文件为单位)。
-
@Tony J 我的程序不需要向量中有这么多元素。我只是对向量的内存管理产生了好奇,所以我随机地把它扔了进去。我试图理解的是为什么它保持稳定然后出现峰值,而不是稳定地泄漏。
-
再一次,我认为这不一定是向量的错误(在您的情况下,虽然不是一般情况下),但需要的整体进程内存导致为您的应用程序分配新的页面文件操作系统。
-
@Amon Zilca:谢谢,这似乎是件好事。您是否碰巧有任何关于其工作原理的好资源(比谷歌搜索会更好)?
标签: c++ memory memory-management vector