首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_beginthreadex内存泄漏

_beginthreadex内存泄漏
EN

Stack Overflow用户
提问于 2014-05-11 01:38:31
回答 1查看 599关注 0票数 1

下面的代码是我的整个测试程序。每次我按ENTER键时,进程使用的RAM都会以4k的速度增加(它会一直增加,而且不会停止;我在任务管理器中看到了这种情况)。怎么啦?同样的事情也发生在_beginthread上。

我正在尝试编写一个服务器,并且我想用一个线程来处理每个连接。(请注意,这意味着我不能加入线程,因为这将暂停主线程接受新连接。)

代码语言:javascript
复制
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地址来测试它。

EN

回答 1

Stack Overflow用户

发布于 2014-05-11 04:57:28

任务管理器没有显示程序使用的内存。要获得更好的视图,请使用Task Manager的资源监视器,并观察私有字节指示。但是所有内存监视器只显示“虚拟内存”,通常由运行时库保留,而不是释放回Windows。你没有真正的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23584301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档