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

A.2.131.2 何时不使用 -xipo 过程间分析

在链接步骤中使用目标文件集合时,编译器试图执行整个程序分析和优化。对于该目标文件集合中定义的任何函数或子例程 foo(),编译器做出以下两个假定:

如果假定 1 对于给定的应用程序不成立,请勿使用 -xipo=2 进行编译。

如果假定 2 不成立,请不要使用 -xipo=1 也不要使用 -xipo=2 进行编译。

例如,如果对函数 malloc() 创建了您自己的版本,并使用 -xipo=2 进行编译。这样,对于任何库中引用 malloc() 且与您的代码链接的所有函数,都必须使用 -xipo=2 进行编译,并且需要在链接步骤中对其目标文件进行操作。由于这对于系统库不大可能,因此不要使用 -xipo=2 编译您的 malloc 版本。

另举一例,如果生成了一个共享库,有两个外部调用(foo() 和 bar())分别在两个不同的源文件中。并假设 bar() 调用 foo()。如果可能会在运行时插入 foo(),则不要使用 -xipo=1-xipo=2 编译 foo() 和 bar() 的源文件。否则,foo() 会内联到 bar() 中,从而导致出现错误的结果。

另请参见

-xjobs