_beginthreadex泄漏记忆

时间:2014-05-10 17:38:31

标签: c++ windows codeblocks

以下代码是我的整个测试程序。每次按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来编译并测试它。

1 个答案:

答案 0 :(得分:0)

任务管理器未显示程序使用的RAM。为了更好地查看,请使用任务管理器的资源监视器并观察专用字节指示。但是所有内存监视器仅显示“虚拟内存”,它通常由运行时库保留,而不是释放回Windows。你没有真正的问题。