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

A.2.132.1 值

-xipo 选项可以是下列值。

表 A–34 -xipo

值  

含义  

0

不执行过程间的优化 

1

执行过程间的优化 

2

执行过程间的别名分析和内存分配及布局的优化,以提高缓存的性能 

缺省值

如果未指定 -xipo,则假定 -xipo=0

如果仅指定了 -xipo,则假定 -xipo=1

示例

以下示例在相同的步骤中编译和链接。


example% CC -xipo -xO4 -o prog  part1.cc part2.cc part3.cc

优化器在三个源文件之间执行交叉文件内联。这在链接的最后一步完成,因此不必在一次编译所有源文件,可以分多次单独进行编译,每次编译时都指定 -xipo 选项。

以下示例在不同的步骤中编译和链接。


example% CC -xipo -xO4 -c part1.cc part2.cc
example% CC -xipo -xO4 -c part3.cc
example% CC -xipo -xO4 -o prog part1.o part2.o part3.o

在编译步骤中创建的目标文件具有在文件内部编译的附加分析信息,这样就可以在链接步骤中执行跨文件优化。

交互

-xipo 选项要求优化级别至少为 -xO4

不能在同一编译器命令行上同时使用 -xipo 选项和 -xcrossfile 选项。

警告

在不同的步骤中进行编译和链接时,必须在这两个步骤中都指定 -xipo 才有效。

没有使用 -xipo 编译的对象可以自由地与使用 -xipo 编译的对象链接。

即使使用 -xipo 对库进行了编译,这些库也不参与交叉文件的过程间分析,如以下示例中所示。


example% CC -xipo -xO4 one.cc two.cc three.cc
example% CC -xar -o mylib.a one.o two.o three.o
...
example% CC -xipo -xO4 -o myprog main.cc four.cc mylib.a

本示例中,在 one.cctwo.ccthree.cc 之间以及 main.ccfour.cc 之间执行过程间优化,但不在 main.ccfour.ccmylib.a 中的例程之间执行过程间优化。(第一个编译可能生成有关未定义符号的警告,但仍可执行过程间优化,因为过程间优化是编译和链接的一个步骤。)

由于执行跨文件优化时需要附加信息,因此 -xipo 选项会生成更大的目标文件。不过,该附加信息不会成为最终的二进制可执行文件的一部分。可执行程序大小的增加都是由于执行的附加优化导致的。