gon*_*aao 5 c++ valgrind memory-leaks tbb c++11
测试程序:
#include <tbb/parallel_invoke.h>
int main(void)
{
tbb::parallel_invoke([]{},[]{});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g++ -std=c++11 tmp.cpp -ltbb检查过
valgrind --tool=memcheck --track-origins=yes \
--leak-check=full --log-file=report ./a.out`
Run Code Online (Sandbox Code Playgroud)libtbb版本:4.0,valgrind版本:3.8.1。
以上部分测试结果:
possibly lost: 1,980 bytes in 6 blocks
Run Code Online (Sandbox Code Playgroud)
问题是:
这是一个TBB错误吗?
或者这possible lost实际上是安全的,这只是 valgrind 认为不安全的一些代码?
最有可能的是,这是误报,而不是错误。至少有以下几个原因:
libtbbmalloc,它会缓存内存直到进程终止,并且可能会出现泄漏。main()终止后,工作线程很可能仍在运行。它给 valgrind 带来了同样的印象为了合理指控TBB泄漏,排除上述因素,例如:
TBB_VERSION=1将输出TBB: ALLOCATOR malloc但不输出TBB: ALLOCATOR scalable_malloc例如
int main()
{
assert(tbb::tbb_allocator<int>::allocator_type() != tbb::tbb_allocator<int>::scalable);
{ // TBB scope
tbb::task_scheduler_init scope;
tbb::parallel_invoke([]{},[]{});
} // TBB threads start termination here
sleep(10); // wait for threads to terminate
return 0;
}
Run Code Online (Sandbox Code Playgroud)