У меня есть то, что выглядит как утечка стека, напрямую связанная с использованием 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 для отображения на диаграмме.: Диаграмма байтов стека и кучи
Все, что я вижу, указывает на утечку памяти, вызванную потоком.Я пытался использовать соединение, но даже тогда все еще есть утечка, и соединение не будет работать для моего приложения.Я запускаю это на Linux 4.14.77-70.59.amzn1.x86_64 с gcc версии 8.3.0
Есть ли что-то, что я должен делать по-другому с потоком, или это "утечка" просто ошибочная потеря памятиот valgrind?
Спасибо