首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么_beginthread返回错误

为什么_beginthread返回错误
EN

Stack Overflow用户
提问于 2012-09-11 07:36:00
回答 3查看 896关注 0票数 1

我有一个用C++实现的服务器,它在Windows2003企业上运行,内存为25GBRAM。

在一次压力测试中,我发现当它试图通过调用_beginthread来创建一个新线程时,我得到了ENOMEM,这意味着“内存不足”。

但我不明白为什么会内存不足,perfmon的数据显示,当时进程已经使用了1.2 of的VM和类似的物理内存,只有250个线程。

有人能帮助我分析或解释为什么我仍然得到这个错误吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-26 01:44:44

这最终是因为我们的应用程序中的内存泄漏。

票数 0
EN

Stack Overflow用户

发布于 2012-09-11 18:08:28

一个线程通常需要1 MB未分段的地址空间。如果您的压力测试有零碎的内存,以至于没有1MB的伸展空间可用,那么您将无法创建任何新线程。在最坏的情况下,这可以通过每个一个字节的2000个分配来实现。

票数 2
EN

Stack Overflow用户

发布于 2012-09-11 07:56:55

一个典型的32位应用程序会在创建少于2048个线程后耗尽(虚拟)内存。默认情况下,每个线程保留1MB的连续虚拟地址空间,因此2048个线程将需要2 2GB的虚拟内存。这是32位进程在用户模式下可以使用的最大值。

附注:有一个选项(至少在Windows上)可以配置操作系统在用户模式下保留最多3 3GB的虚拟地址空间。

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

https://stackoverflow.com/questions/12360845

复制
相关文章

相似问题

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