Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 私有脏内存是否可以表示内存泄漏?_C++_Linux_Memory_Memory Management_Memory Leaks - Fatal编程技术网

C++ 私有脏内存是否可以表示内存泄漏?

C++ 私有脏内存是否可以表示内存泄漏?,c++,linux,memory,memory-management,memory-leaks,C++,Linux,Memory,Memory Management,Memory Leaks,我有一个应用程序,它的内存随着我运行的测试用例而增加。这显然让我相信我的应用程序正在泄漏内存。所以我对我的应用程序运行valgrind,令人惊讶的是它没有发现任何泄漏 我不确定我的进程的内存为什么会泄漏,所以我查看了进程的smaps文件 下面,如果我觉得有趣的话 08426000-42f56000 rwxp 00000000 00:00 0 [heap] Size: 961728 kB Rss:

我有一个应用程序,它的内存随着我运行的测试用例而增加。这显然让我相信我的应用程序正在泄漏内存。所以我对我的应用程序运行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
为了弄清楚这些数字,我对私有脏内存做了一些研究,大多数文章都指出这是一个由于成本高昂而尚未释放的内存

这似乎表明这些只是应用程序释放的内存,但操作系统仍保留着这些内存

有人能帮我更好地理解私人关系吗?这可能是我内存泄漏的迹象吗


感谢

似乎是内存在等待写入磁盘,系统需要花费一些时间来完成。您的程序必须产生大量结果,并将其写入磁盘文件


在执行清理步骤之后,例程退出之前,内存是否会变小?这听起来像是你抓住了一些与测试用例相关的东西,这会导致记忆被保留。您是使用共享指针还是直接处理内存管理?这里有一个关于什么是私有脏内存的描述:基本上,您的进程已经“使用”(写入)了内存,因此,如果为了给另一个进程腾出空间而进行交换,则需要保存内存。这本身并不表示您正在泄漏内存。可能您正在分配大量小容量内存,然后又取消分配。我不能预测太多,但它与内存碎片有什么关系吗?你可能没有内存泄漏——在内存尚未释放但不再有引用/指针的意义上——但听起来你可能有所谓的内存累积——你不断为新数据分配新空间,但不释放/取消分配/取消引用您不再需要的旧内存。我会更仔细地看看您认为您正在释放不再需要的内存的地方。您似乎在做一些不强制磁盘写入(脏页累积)的事情,除非在最后构建了一个干净的出口。某个地方你没有跟上你的簿记。也许会刷新一些文件指针?还是关闭并重新打开它们?