Имеется простейший код:
#include <thread>
void f()
{
}
int main()
{
while (true)
{
std::thread thr(f);
thr.join();
}
return 0;
}
Берём компилятор MinGW, компилируем и запускаем. Видим в Process Explorer'е картину, находящуюся в файле mingw.png. Компилируем то же самое в msvc. Картинка меняется и соответствует скриншоту в файле msvc.png. Иными словами, в MinGW почему-то происходит утечка памяти, в то время как в msvc её нет.
Для полноты картины приведу компиляторы:
MinGW-builds x86_64 4.9.2 POSIX SEH rev 0
MSVC 2013 Update 4 x64
Компиляция выполнялась командами
Bash
g++ -s -std=c++11 -o thread_mem_leak_mingw.exe thread_mem_leak.cpp
cl -O4 -o thread_mem_leak_msvc.exe thread_mem_leak.cpp
Внимание, вопрос! (Гонг.
) Почему утекает память? Это глюк компилятора или я чего-то не понимаю?
P.S. Проверял на нескольких компиляторах MinGW веток 4.8 и 4.9, 32- и 64-бита. Картина не меняется. Память течёт.