我在 malloc()
上阅读了手册在 Solaris 中,发现 malloc()
可以设置EAGAIN
Solaris 中的错误。
手册写道:
EAGAIN There is not enough memory available to allocate size bytes of memory; but the application could try again later.
我个人认为如果
malloc()
返回 NULL
,一定存在内存泄漏或其他一些持续存在的问题。如果发生这种情况,稍后再试会有什么帮助?所以我想知道,在什么情况下可以
malloc()
套装EAGAIN
错了吗?有没有人遇到过这样的情况?
最佳答案
标准malloc()
未将 errno 设置为 EAGAIN
失败。
在 Unix 下,malloc()
很可能将 errno 设置为 ENOMEM
.
一般错误号 EAGAIN
意味着 Resource temporarily unavailable
.这意味着操作系统可能会在一段时间内拥有可用资源。
这只是一种说法,我现在没有足够的内存,但我会在不久的将来尝试释放一些,然后我可以把它给你。
这可能与操作系统通常为进程分配内存的方式有关——即使内存是free()'d
它不会返回到操作系统,但仍为该进程保留。
我只是推测,但也许在 EAGAIN
的情况下系统将尝试重新分配分配给其他进程的未使用内存。这可能需要时间,因此 EAGAIN
返回码。
我建议使用 sleep()
收到后EAGAIN
然后再试一次。在第二次调用之后,要么分配内存,要么返回另一个错误。如果是 ENOMEM
,那么案子就清楚了,没有内存了。如果是 EAGAIN
再次......这取决于你。
关于c - malloc() 何时设置 EAGAIN 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16912619/