我有一台用 C++ 实现的服务器,运行在具有 25GB RAM 的 Windows 2003 企业版上。
在压力测试期间,我看到当它试图通过调用 _beginthread 创建一个新线程时,我得到了 ENOMEM,这意味着“内存不足”。
但是我不明白为什么内存不足,perfmon数据显示当时进程使用了1.2GB VM和类似的物理内存,只有250个线程。
谁能帮我分析或解释为什么我仍然会报错?
最佳答案
一个线程通常需要 1 MB 的未碎片化地址空间。如果您的压力测试将内存碎片化到没有 1 MB 可用空间的程度,您将无法创建任何新线程。在最坏的情况下,这可以通过少至 2000 次每次分配一个字节来实现。
关于c++ - 为什么 _beginthread 返回错误 ENOMEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360845/