Tes*_*oos 17 c++ multithreading boost valgrind memory-leaks
有人能告诉我是否提升线程库泄漏.在我看来它确实如此:谷歌说我应该使用boost线程和pthread进行编译我正在做的和版本1.40这个问题已经修复但我仍然会泄漏.请注意,这将编译正常,但检测到泄漏.
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
void t1(){}
int main(void){
boost::thread th1(t1);
th1.join();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
使用Valgrind,我得到以下输出
HEAP SUMMARY:
==8209== in use at exit: 8 bytes in 1 blocks
==8209== total heap usage: 5 allocs, 4 frees, 388 bytes allocated
==8209==
==8209== 8 bytes in 1 blocks are still reachable in loss record 1 of 1
==8209== at 0x4024F20: malloc (vg_replace_malloc.c:236)
==8209== by 0x4038CCB: boost::detail::get_once_per_thread_epoch() (in /usr/local/lib/libboost_thread.so.1.42.0)
==8209== by 0x40329D4: ??? (in /usr/local/lib/libboost_thread.so.1.42.0)
==8209== by 0x4032B26: boost::detail::get_current_thread_data() (in /usr/local/lib/libboost_thread.so.1.42.0)
==8209== by 0x4033F32: boost::thread::join() (in /usr/local/lib/libboost_thread.so.1.42.0)
==8209== by 0x804E7C3: main (testboost.cpp)
==8209==
==8209== LEAK SUMMARY:
==8209== definitely lost: 0 bytes in 0 blocks
==8209== indirectly lost: 0 bytes in 0 blocks
==8209== possibly lost: 0 bytes in 0 blocks
==8209== still reachable: 8 bytes in 1 blocks
==8209== suppressed: 0 bytes in 0 blocks
Run Code Online (Sandbox Code Playgroud)
我也尝试使用以下网站列出的代码:http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html 仍然是同样的问题.
Man*_*rse 10
这与boost 1_46_1有关,因此对于您使用的版本可能不是这样.如果你真的想说服自己,请看一下激励源.(运行示例代码时,OSX上的检漏仪未检测到任何泄漏).
这不是实际的泄漏(除非pthreads,您正在使用的过时版本的boost或编译器存在错误).
get_once_per_thread_epochmallocs是一个新的,uintmax_t并将其映射到线程本地存储,epoch_tss_key其中包含一个关联的析构函数,用于释放映射的数据.因此,可以保证释放malloced内存.
我真的不明白为什么valgrind会将其检测为泄漏,但可能是因为pthreads退出函数在valgrind之后的某个时刻执行.另一种可能性是pthread函数本身正在泄漏,但我没有在文档中看到任何暗示这种情况的内容.
| 归档时间: |
|
| 查看次数: |
2308 次 |
| 最近记录: |