我似乎直接归因于使用std :: thread的堆栈泄漏。将其简化为最简单的示例,我使用了https://en.cppreference.com/w/cpp/thread/thread/detach中的示例代码,但对其进行了修改以循环并多次调用线程创建函数,并删除了多余的代码:
#include <chrono>
#include <thread>
void independentThread()
{
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
void threadCaller()
{
std::thread t(independentThread);
t.detach();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
int main()
{
for(int i=0; i < 100; i++)
threadCaller();
std::this_thread::sleep_for(std::chrono::seconds(50));
}
然后我用g ++ 8.3编译了代码:
g++ -std=c++14 -pthread -g -fstack-check -fstack-protector-all -finstrument-functions thread_test.cpp -o t_test
然后我用valgrind运行代码:
valgrind --tool=massif --stacks=yes --time-unit=ms ./t_test
valgrind的输出通过“ ms_print”运行,然后移至excel到图表: Chart of stack and heap bytes
我看到的所有内容都指向该线程导致的内存泄漏。我已经尝试过使用join,但是即使那样仍然存在泄漏,join无法用于我的应用程序。我正在gcc版本8.3.0的linux 4.14.77-70.59.amzn1.x86_64上运行此程序
我是否应该对线程执行其他操作,或者这种“泄漏”只是由valgrind错误报告的内存丢失?
谢谢