我正在开发一个需要大量内存才能批量运行的 C++ 应用程序。
(> 20GB)
我的一些客户遇到了内存限制,有时操作系统开始交换,总运行时间加倍或更糟。
我读到可以使用 mlockall 来防止进程被换出。当进程内存需求以这种方式接近或超过可用物理内存时会发生什么?
我想答案可能是特定于操作系统的,所以请在您的答案中列出操作系统。
将会发生的情况正是您所看到的 - 无法分配更多内存,因为您的应用程序已获取系统中的所有物理内存,并且由于这些内存无法换出,因此 malloc 除了失败之外无能为力。这种行为在大多数现代操作系统中都是相同的。
如果你想使用 mlockall (你真的不应该),你最好确保系统具有所需的物理内存量,否则你将陷入痛苦的世界 - malloc 对于其他进程也会失败,这些可能会失败让你的系统崩溃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)