gpt4 book ai didi

c - malloc() 何时设置 EAGAIN 错误?

转载 作者:行者123 更新时间:2023-12-02 02:01:43 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com