簡體   English   中英

TBB可能的內存泄漏

[英]TBB possible memory leak

測試程序:

#include <tbb/parallel_invoke.h>

int main(void)
{
    tbb::parallel_invoke([]{},[]{});
    return 0;
}
  1. 使用g++ -std=c++11 tmp.cpp -ltbb
  2. 與檢查

     valgrind --tool=memcheck --track-origins=yes \\ --leak-check=full --log-file=report ./a.out` 
  3. libtbb版本: 4.0valgrind版本: 3.8.1

以上測試結果部分:

possibly lost: 1,980 bytes in 6 blocks

問題是:

這是TBB錯誤嗎?

還是這種possible lost實際上是安全的,只是valgrind不認為某些代碼安全?

這很可能是誤報,而不是錯誤。 至少有幾個原因:

  1. TBB使用其自己的內存分配器libtbbmalloc ,它緩存內存直到進程終止,並且可能顯示為泄漏。
  2. TBB線程異步運行和終止。 main()終止后,工作線程可能仍在運行。 它對valgrind產生相同的印象

為了合理地指責TBB發生泄漏,請排除上述因素,例如:

  1. 刪除libtbbmalloc.so.2或tbbmalloc.dll文件,以便與運行一個env.variable應用TBB_VERSION=1將輸出TBB: ALLOCATOR malloc但不是TBB: ALLOCATOR scalable_malloc
  2. 確保所有TBB線程均已終止

例如

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM