我正在用 C++ 开发一个贝叶斯推理采样器,它在树上传递了很多信息,并且这棵树是在智能指针(Boost 的 shared_ptr 和 weak_ptr)的帮助下实现的。
在推理期间(即运行一个较长的 C++ 函数 1-2 分钟),树发生了很大变化,创建和销毁了许多节点。
推理过程完全(100% 负载)占用处理器(一个线程,更准确地说)。由于某种原因,新内存(用于新节点)被占用,但旧内存没有被完全释放,这在 1-2 分钟的推理后导致内存溢出。
但是,如果我在推理过程中添加暂停,似乎程序会完全破坏旧对象,并且一切正常。
在我看来,原因是析构函数(或者更准确地说,它之后发生的事情,即内存释放)由于某种原因被延迟了。
请您告诉我:1)这似乎是一个真正的问题吗?2)如果是,在释放“足够的内存”时等待如何更好?什么是标准策略?
(程序在 Unix 上运行。)