下面的代码是我的整个测试程序。每次我按ENTER键时,进程使用的RAM都会以4k的速度增加(它会一直增加,而且不会停止;我在任务管理器中看到了这种情况)。怎么啦?同样的事情也发生在_beginthread上。
我正在尝试编写一个服务器,并且我想用一个线程来处理每个连接。(请注意,这意味着我不能加入线程,因为这将暂停主线程接受新连接。)
unsigned __stdcall thread_test(void *)
{
for(int i = 0; i < 10000; i++)
{
i+=1;
i-=1;
} //simulating processing
_endthreadex( 0 );
}
int main()
{
HANDLE hThread;
while(1)
{
getchar();
hThread = (HANDLE)_beginthreadex( NULL, 0, thread_test, 0, 0, NULL );
CloseHandle( hThread );
}
}用代码块和visual studio编译。
编辑:我做了一些测试,当内存达到133.000K左右时,内存就会停止填满(当程序启动时,内存大约是800k);但在这个阶段,程序的运行速度比开始时慢了4-5倍(内存更高-程序运行更慢),所以我的服务器像这样运行是不好的。
编辑2:我有了Visual Studio 2013,这个问题已经解决了。
编辑3:如果我在Visual Studio 2013中测试上面的代码,它不会泄漏。但如果我使用beginthreadex和一个小的服务器代码,它会像以前一样给我泄漏,每个请求提供4k。下面是我使用http://pastebin.com/EDmJXkZU的服务器测试代码(它什么也没做,只是看到它泄漏了内存)。您可以编译它并通过在浏览器的地址栏中键入您的IP地址来测试它。
发布于 2014-05-11 04:57:28
任务管理器没有显示程序使用的内存。要获得更好的视图,请使用Task Manager的资源监视器,并观察私有字节指示。但是所有内存监视器只显示“虚拟内存”,通常由运行时库保留,而不是释放回Windows。你没有真正的问题。
https://stackoverflow.com/questions/23584301
复制相似问题