在 -xO3 或更高级别编译非常大型的例程(一个过程中有数几千行代码)需要大量内存。在这种情况下,系统性能可能降低。您可以通过限制单个进程的可用虚拟内存量来控制内存占用。
要在 sh shell 中限制虚拟内存,请使用 ulimit 命令。有关更多信息,请参见 sh(1) 手册页。
以下示例显示了如何将虚拟内存限制为 4GB:
example$ ulimit -d 4000000
在 csh shell 中,可使用 limit 命令限制虚拟内存。有关更多信息,请参见 csh(1) 手册页。
下一个示例也显示了如何将虚拟内存限制为 4GB:
example% limit datasize 4G
这些示例都会使优化器在数据空间达到 4GB 时尝试恢复。
虚拟空间的限制不能大于系统总的可用交换空间。在实际使用时,虚拟空间的限制要足够的小,以允许在大型编译过程中正常使用系统。
请确保编译不会消耗一半以上的交换空间。
有 8GB 的交换空间时,请使用以下命令:
在 sh shell 中:
example$ ulimit -d 4000000
在 csh shell 中:
example% limit datasize 4G
最佳设置取决于要求的优化程度、实际内存量和可用的虚拟内存量。