Sun Studio 12:C 用户指南

B.2.93.2 何时不使用 -xipo=2 过程间分析

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

如果假定 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() 中,从而导致出现错误的结果。