Утечка стека C ++ с классом std :: thread - PullRequest
0 голосов
/ 05 марта 2019

У меня есть то, что выглядит как утечка стека, напрямую связанная с использованием 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?

Спасибо

...