Arn*_*aud 4 c++ multithreading memory-leaks visual-studio c++11
我在Visual Studio Pro 2012上使用std :: thread使用这个简单的代码有内存泄漏:
#include <thread>
void f(){}
int main(){
std::thread t(f);
t.join();
_CrtDumpMemoryLeaks();
return 0;}
Run Code Online (Sandbox Code Playgroud)
Win32输出:
Detected memory leaks!
Dumping objects ->
{293} normal block at 0x00A89520, 44 bytes long.
Data: < > 01 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00
Object dump complete.
Run Code Online (Sandbox Code Playgroud)
x64输出:
Detected memory leaks!
Dumping objects ->
{293} normal block at 0x00000000003FCB00, 72 bytes long.
Data: < > 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
Run Code Online (Sandbox Code Playgroud)
如果我评论main方法的两个第一行,我没有内存泄漏.
它从何而来 ?
编辑:泄漏仍然在这里与该代码:
#include <thread>
void f(){}
int main(){
{
std::thread t(f);
t.join();
}
_CrtDumpMemoryLeaks();
return 0;}
Run Code Online (Sandbox Code Playgroud)
众所周知,CrtDumpMemoryLeaks是不可靠的.当您第一次使用std :: thread时,标准库可能会故意泄漏一次性分配.要查明是否存在真正的内存泄漏,请尝试以下操作:
for (int i = 0; i < LIMIT; ++i) {
std::thread t(f); t.join();
}
_CrtDumpMemoryLeaks();
Run Code Online (Sandbox Code Playgroud)
然后在增加LIMIT时查看泄漏量是否增加.如果没有,你没事.