Sun Studio 12 Update 1:C++ 用户指南

A.2.157 -xOlevel

指定优化级别,请注意是大写字母 O 后跟数字 12345。通常,程序执行速度取决于优化的级别。优化级别越高,运行时性能越好。不过,较高的优化级别会延长编译时间并生成较大的可执行文件。

在少数情况下,级别为 –xO2 时的性能可能优于其他级别,–xO3 也可能胜过 –xO4。尝试用每个级别进行编译,以查看您是否会遇到这种少见的情况。

如果优化器运行时内存不足,则会尝试在较低的优化等级上重试当前过程来恢复。优化器会以在 –xOlevel 选项中指定的初始级别恢复执行后续过程。

–xO 有五个级别。以下几节描述了在 SPARC 平台和 x86 平台上如何操作这些级别。

A.2.157.1 值

在 SPARC 平台上:

在 x86 平台上:

交互

如果使用 -g-g0 且优化级别是 -xO3 或更低,编译器会为近乎完全优化提供尽可能多的符号信息。尾部调用优化和后端内联被禁用。

如果使用 -g-g0 且优化级别是 -xO4 或更高,编译器会为完全优化提高尽可能多的符号信息。

使用 -g 进行调试不会抑制 –xOlevel,但 –xOlevel 会对 –g 造成一些限制。例如,–xOlevel 选项会降低调试的作用,因此无法显示 dbx 中的变量,但仍可使用 dbx where 命令获取符号回溯。有关更多信息,请参见《使用 dbx 调试程序》。

-xipo 选项只有与 -xO4-xO5 一起使用时才有效。

优化级别低于 -xO3 时,-xinline 选项不起作用。优化级别为 -xO4 时,优化器会决定应该内联哪些函数,而不管是否指定了 -xinline 选项。优化级别为 -xO4 时,编译器还会尝试确定内联哪些函数可以提高性能。如果使用 -xinline 强制内联函数,实际上可能会降低性能。

缺省值

缺省为不优化。不过,只有不指定优化级别时才可能使用缺省设置。如果指定了优化级别,则没有任何选项可用来关闭优化。

如果尝试不设置优化级别,请不要指定任何隐含优化级别的选项。例如,-fast 是将优化级别设置为 -xO5 的宏选项。隐含优化级别的所有其他选项都会给出优化已设置的警告消息。不使用任何优化来编译的方法是从命令行删除所有选项或创建指定优化级别的文件。

警告

如果在 –xO3–xO4 级别上优化多个非常大的过程(一个过程有数千行代码),优化器会需要过多内存。在这些情况下,机器的性能就会降低。

为了防止性能降低,请使用 limit 命令限制单一进程可用的虚拟内存大小(请参见 csh(1) 手册页)。例如,将虚拟内存限制为 4 GB:


example% limit datasize 4G

如果它达到 4 GB 的数据空间,该命令会使优化器尝试恢复。

限制不能大于机器总的可用交换空间,而且要足够的小以允许在大型编译的过程中机器可以正常使用。

数据大小的最佳设置取决于要求的优化程度、真实内存和可用虚拟内存的大小。

要查找实际的交换空间,请输入: swap– l

要查找实际的真实内存,请输入: dmesg | grep mem

另请参见

-xldscope –fast-xcrossfile=n–xprofile=pcsh(1) 手册页