为什么_beginthread返回错误ENOMEM

时间:2012-09-10 23:36:00

标签: c++ stress-testing

我有一台用C ++实现的服务器,运行在具有25GB RAM的Windows 2003企业上。

在压力测试期间,我看到它试图通过调用_beginthread创建一个新线程,我得到了ENOMEM,这意味着"没有足够的内存"。

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

任何人都可以帮我分析或解释为什么我还有这个错误吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

由于我们的应用程序中存在内存泄漏,最终结束了。