Sun Studio 12:Fortran 用户指南

3.4.112 –xalias[= keywords]

指定要由编译器假定的别名程度。

一些非标准编程方法会产生干扰编译器优化策略的情况。使用过度索引、指针以及将全局或非唯一变量作为子程序参数进行传递,会产生歧义别名情况,从而使代码无法按预期方式运行。

使用 -xalias 标志可将程序偏离 Fortran 标准的别名要求的程度通知给编译器。

此标志可能带有关键字列表,也可能不带关键字列表。keywords 列表由逗号分隔,各个关键字指示程序中存在的别名情况。

可以在每个关键字前面加上 no%,以指示不存在的别名类型。

别名关键字如下:

表 3–10 -xalias 选项关键字

关键字 

含义 

dummy

子程序的哑元(形式参数)可以互为别名,也可以作为全局变量的别名。 

no%dummy

(缺省值)。哑元的使用遵循 Fortran 标准,它们不能互为别名,也不能作为全局变量的别名。 

craypointer

(缺省值)。Cray 指针可以指向任何全局变量或 LOC() 函数采用其地址的局部变量。此外,两个 Cray 指针可能指向同一数据。这是可以禁止某些优化的安全假定。

no%craypointer

Cray 指针仅指向唯一内存地址,如从 malloc() 获得的地址。此外,没有两个 Cray 指针是指向同一数据的。此假定允许编译器优化 Cray 指针引用。

actual

编译器将子程序的实际参数视为全局变量。将参数传递给子程序可能会导致通过 Cray 指针命名别名。 

no%actual

(缺省值)传递参数不会导致进一步命名别名。 

overindex

  • 对 COMMON 块中元素的引用可能引用 COMMON 块或等效组中的任何元素。

  • 如果将 COMMON 块或等效组中的任何元素作为实际参数传递给子程序,被调用的子程序就可以访问该 COMMON 块或等效组中的任何元素。

  • 将序列派生类型的变量视为 COMMON 块,此类变量的元素可以作为该变量其他元素的别名。

  • 可能违反了各数组边界,但除上文所述外,假定引用的数组元素仍然在数组内。过度索引并未考虑数组语法、WHEREFORALL 语句等因素。如果在这些构造中出现过度索引,应将它们重写为 DO 循环。

no%overindex

(缺省值)没有违反数组边界。数组引用没有引用其他变量。 

ftnpointer

对外部函数的调用可能使 Fortran 指针指向任何类型、种类或等级的目标变量。 

no%ftnpointer

(缺省值)Fortran 指针遵循标准中的规则。 

指定不带列表的 -xalias 将为不违反 Fortran 别名规则的大多数程序提供最佳性能,不带列表的 -xalias 等效于:

no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer

为了提高效率,在使用优化级别 -xO3 及更高级别进行编译时,应该使用 -xalias

如果未指定 -xalias 标志,则编译器在缺省情况下假定程序符合 Fortran 95 标准(Cray 指针除外):

no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer

有关各种别名情况的示例以及如何使用 -xalias 指定它们,请参见《Fortran 编程指南》的“移植”一章。