我正在使用需要大量内存才能进行批处理运行的C++应用程序。
(> 20GB)

我的一些客户遇到了内存限制,有时操作系统会开始交换内存,并且总运行时间加倍甚至更糟。

我读过我可以使用mlockall防止进程被换出。当进程内存需求以这种方式接近或超过可用物理内存时,会发生什么?

我猜答案可能是特定于操作系统的,因此请在您的答案中列出操作系统。

最佳答案

所发生的一切恰好是您所看到的-无法分配更多的内存,因为您的应用程序已获取系统中的所有物理内存,并且由于这些物理内存无法交换出去,因此malloc只能做任何事情而失败。在大多数现代操作系统中,这种行为都是相同的。

如果您想使用mlockall(但实际上不应该),则最好确保系统具有所需的物理内存量,否则您将陷入痛苦的境地-malloc也会因其他进程而失败,并且这些可能使您的系统崩溃。

10-04 21:27