[英]TBB possible memory leak
測試程序:
#include <tbb/parallel_invoke.h>
int main(void)
{
tbb::parallel_invoke([]{},[]{});
return 0;
}
g++ -std=c++11 tmp.cpp -ltbb
與檢查
valgrind --tool=memcheck --track-origins=yes \\ --leak-check=full --log-file=report ./a.out`
libtbb
版本: 4.0
, valgrind
版本: 3.8.1
。
以上測試結果部分:
possibly lost: 1,980 bytes in 6 blocks
問題是:
這是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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.