私有脏内存是否可能是内存泄漏的指示?

6

我有一个应用程序,随着测试用例的运行,其内存增加。这显然让我相信我的应用程序存在内存泄漏。因此,我在我的应用程序上运行了valgrind,并惊讶地发现它没有发现任何泄漏。

我不确定为什么我的进程会出现内存泄漏,所以我查看了我的进程的smaps文件,以下是我发现的有趣内容:

08426000-42f56000 rwxp 00000000 00:00 0                                  [heap]
Size:             961728 kB
Rss:              960252 kB
Pss:              960252 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:    960252 kB
Referenced:       960252 kB
Anonymous:        960252 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB

为了理解这些数字,我做了一些关于Private_Dirty内存的研究,大多数文章都指出这是尚未被释放的内存,因为它们很昂贵。
这似乎表明这些只是应用程序释放的内存,但由操作系统保留。
有人能帮我更好地理解private_dirty吗?这可能是我遇到内存泄漏的迹象吗?
谢谢。

1
这里有一个关于private-dirty的描述:基本上是你的进程“使用”(写入)的内存,如果被换出以为其他进程腾出空间,那么它需要被保存。这本身并不表示你正在泄漏内存。 - TripeHound
也许你正在分配大量小内存,然后再释放它们。我无法预测太多,但这是否与内存碎片有关? - Cool_Coder
@TripeHound 我不确定这是否表示我的进程存在内存泄漏。我认为它表示进程写入了该内存并将其释放。但操作系统未必已经回收了它。 - Desert Ice
1
你可能没有内存泄漏——指的是未被释放但你不再拥有引用/指针的内存,但听起来你可能有所谓的内存积累——你不断为新数据分配新空间,但没有释放/解除引用旧的不再需要的内存。我会仔细查看你认为自己释放了不再需要的内存的地方。 - TripeHound
1
你似乎在做一些不会强制进行磁盘写入(脏页累积)的操作,除了在最后建立一个干净的退出时。你可能没有跟上你的账目。也许可以刷新一些文件指针?或者关闭并重新打开它们? - Jiminion
显示剩余9条评论
1个回答

0

看起来是内存等待写入磁盘,因此系统需要一些时间来完成这个过程。你的程序可能会产生大量结果,这些结果会被写入磁盘文件。

什么是脏私有内存?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接