试图理解为什么我的 C++ 程序在 运行 后长时间变慢

Trying to understand why my C++ program is slowing down after running for long time

到目前为止,

None 个与我能找到的主题接近的线程(例如 this one)帮助了我。

我有一个 C++ 程序,它从文件中读取一些数据,运行s 相当复杂和密集的操作,然后将输出写入新文件。当我让进程 运行 几个小时时,以下是我注意到的行为:

它可以是什么?我怀疑内存泄漏,但 RAM 不会无限期地增加吗?即使资源可用(CPU、RAM、磁盘 space 等),还有什么会导致程序逐渐变慢?

I suspected memory leaking, but then wouldn't the RAM keep increasing indefinitely?

它会无限增加,只是您在查看的 RAM 使用统计信息中看不到它。

发生的事情是 OS 将继续分配新的物理 RAM 页面,直到观察到的上限点。那时,每当您的程序请求新内存时,它都会先将一些已分配的内存换出到磁盘,然后再在 RAM 中分配新的物理内存。因此,您可以通过以与由于泄漏而分配虚拟内存的速度大致相同的速度交换到磁盘来释放物理 RAM。由于换出的内存可能只包含泄漏的数据,您的程序不太可能再次触及它,因此它会无限期地保留在磁盘上。如果你让程序 运行 足够长,最终你也会 运行 在磁盘上交换 space。

由交换引起的磁盘常量 I/O 可能是观察到的减速的根本原因。

使用像LeakSanitizer or Valgrind这样的内存分析工具来检测内存泄漏。一旦您的程序的内存消耗停止持续增长,性能问题就会消失。