我们有一段代码利用TBB生成任务来执行某些处理,这是使用以下TBB代码初始化TBB线程池(以匹配核心数)完成的:
tbb::task_scheduler_init(8);
然后,对于我们想要生成的每个任务,我们使用以下代码(其中MainTask派生自tbb :: task类):
task = new (tbb::task::allocate_root()) MainTask(theAction, theOutputData);
tbb::task::enqueue(*task);
当我们运行代码时,我们开始使用一定量的内存,然后当程序执行并产生新任务时,如上所述,内存使用量会逐渐增加。在40分钟的执行中,它从12KB增加到213KB。这肯定不是我们的任何处理代码的结果,并且似乎是TBB没有从TBB allocate_root任务中释放内存的结果,一旦他们完成了我们期望的执行,我们正在创建它。
为什么会这样?我们还需要做些什么来解决这个问题,还是有一些替代方法来生成TBB任务而不使用可以解决这个问题的allocate_root方法?
答案 0 :(得分:2)
如果您仍怀疑存在内存泄漏,则需要进行更详细的测试,以证明内存消耗在初始上升后不会停止(当然,它是非线性函数)。 TBB具有用于检测内存泄漏的特殊单元测试:请参阅src/test/test_task_leaks.cpp