以 -O3 或更高的优化级别编译非常大的例程时,可能需要额外的内存,这可能会降低编译时性能。您可以通过限制单个进程的可用虚拟内存量来控制这种情况。
在 sh shell 中,请使用 ulimit 命令。请参见 sh(1)。
demo$ ulimit -d 16000 |
在 csh shell 中,请使用 limit 命令。请参见 csh(1)。
示例:将虚拟内存限定在 16 MB 以内:
demo% limit datasize 16M |
这些命令行的每一个命令行都会使优化器在数据空间达到 16 MB 时尝试恢复。
此限制值不能大于系统的总可用交换空间,实际上,在进行较大的编译时,此限制值必须足够小才能保证正常地使用系统。请确保没有任何编译占用一半以上的空间。
示例:对于 32M 的交换空间,请使用以下命令:
在 sh shell 中:
demo$ ulimit -d 1600 |
在 csh shell 中:
demo% limit datasize 16M |
最佳设置取决于所请求的优化等级以及可用的实际内存量和虚拟内存量。
在 64 位 Solaris 环境中,应用程序数据段大小的软限制为 2 GB。如果应用程序需要分配更多的空间,请使用 shell 的 limit 或 ulimit 命令取消该限制。
对于 csh,请使用:
demo% limit datasize unlimited |
对于 sh 或 ksh,请使用:
demo$ ulimit -d unlimited |
有关更多信息,请参见《Solaris(64 位)开发者指南》。