Oracle Solaris Studio 12.2:C++ 用户指南

2.6 内存要求

编译需要的内存量取决于多个参数,包括:

在 SPARC 平台上,如果优化器用完了所有内存,那么它将通过在较低优化级别上重试当前过程来尝试恢复。然后优化器将以在命令行上通过 -xOlevel 选项指定的原始级别恢复后续例程。

如果编译包括大量例程的单独源文件,编译器可能会用完所有内存或交换空间。可以尝试降低优化级别。或者,将最大的过程分为其自身的单独文件。

2.6.1 交换空间大小

swap -s 命令用于显示可用的交换空间。有关更多信息,请参见 swap(1M) 手册页。

以下示例演示了 swap 命令的用法:


example% swap -s
total: 40236k bytes allocated + 7280k reserved = 47516k used, 1058708k available

2.6.2 增加交换空间

使用 mkfile(1M) 和 swap(1M) 可增加工作站上交换空间的大小。(您必须成为超级用户才能执行该操作)。mkfile 用于命令创建特定大小的文件,而 swap -a 用于将文件增加到系统交换空间:


 example# mkfile -v 90m /home/swapfile
 /home/swapfile 94317840 bytes
 example# /usr/sbin/swap -a  /home/swapfile

2.6.3 虚拟内存的控制

-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

最佳设置取决于要求的优化程度、实际内存量和可用的虚拟内存量。

2.6.4 内存要求

工作站至少应有 2 GB 内存。有关详细要求,请参见产品发行说明。