增加交换分区大小会增加程序可以使用的内存吗?

增加交换分区大小会增加程序可以使用的内存吗?

我有一个程序需要大量内存。内存太多以至于malloc系统内存不足导致程序失败。

我不在乎将页面交换进出磁盘的开销是否太高 - 我只希望程序能够运行。那么,通过充分增加交换分区大小,是否可以通过有效地提供更多内存来防止内存不足错误?

答案1

malloc() 函数通常分配虚拟的来自记忆的记忆。即使您没有指定操作系统、编程语言或运行时库的版本,我也会假设您的 malloc() 版本不会分配物理内存。因此,添加更多物理内存或增加交换空间可能无法消除您从 malloc() 看到的内存不足错误返回。

为了找到解决方案,您需要确定程序是否超出了分配的(虚拟)内存量,或者系统是否实际上耗尽了内存页。 “当 Linux 内存不足时”(或者此副本) 解释了 malloc() 如何分配(虚拟)内存、两种可能出现内存不足的情况以及如何确定哪种情况。请注意,内存页面的可用性是物理内存大小、交换空间大小、内存使用情况和进程负载的复杂组合。

答案2

嗯,不是。它不会增加你的内存——它只是意味着你的操作系统能够将不立即使用的东西移出以释放内存。这在性能方面没有区别,但如果相关软件没有积极使用内存,你的系统可能能够将内存交换到交换分区用于其他用途。

您可能想尝试创建和使用交换文件,而不是交换分区,以查看添加交换是否有效。

您还可以尝试使用 ulimit 来限制(尽管可能会产生后果)软件使用的内存。

大量交换是不是物理内存的替代品——您要么必须添加更多内存,要么弄清楚为什么您的程序需要那么多内存,然后修复它。

答案3

物理内存是计算机机箱内的内存芯片,也仅仅是内存芯片。当物理内存不足时,就会使用交换文件。增加交换文件大小将有助于防止内存不足错误,但我不建议这样做。可用的交换文件太多会让您的计算机感觉能力不合理,并且可能会导致它在使用大部分页面文件时速度变慢。

最好的解决办法是购买更多的内存芯片。这样一切运行起来都会更好一些。

如果您不介意的话我问一下,您的应用程序在做什么,会消耗这么多内存?

相关内容