#pragma disjoint

适用的调用

表 1. 接受给定编译指示的调用
编译指示 (pragma) xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
#pragma disjoint
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

优化和调整

用途

列出未在其使用范围内彼此互为别名的标识。

通过通知编译器,编译指示中列出的标识都不共享相同的物理存储器,编译指示提供了更多优化机会。

语法

读取语法图跳过可视语法图 #pragma disjoint (  * 变量名称 , *变量名称 )

参数

variable_name
变量的名称。 不得引用以下任何内容:
  • 结构,类 或并集的成员
  • 结构,并集或枚举标记
  • 枚举常量
  • typedef 名称
  • 标签

使用量

#pragma disjoint 伪指令断言编译指示中列出的任何标识都不会共享物理存储器; 如果任何标识 do 实际共享物理存储器,那么编译指示可能会产生不正确的结果。

pragma 可以 基于 XL 的前端开始出现在源程序中允许声明的任何位置,而基于 XL 的前端端基于 Clang 的前端开始声明只能出现在函数或块的作用域中基于 Clang 的前端端。 伪指令中的标识必须在编译指示出现的程序中的位置可见。

必须先声明标识,然后才能在编译指示中使用这些标识。 程序在出现在伪指令中之前,不得在标识列表中取消引用指针,也不得将其用作函数自变量。

基于 XL 的前端开始 -qignprag 编译器选项可以禁用此实用程序。基于 XL 的前端端

示例

以下示例显示了如何使用 #pragma disjoint
int a, b, *ptr_a, *ptr_b;

one_function()
{
  #pragma disjoint(*ptr_a, b)   /* *ptr_a never points to b */
  #pragma disjoint(*ptr_b, a)   /* *ptr_b never points to a */
  
  b = 6;
  *ptr_a = 7;   /* Assignment will not change the value of b  */
   
  another_function(b);    /* Argument "b" has the value 6  */
}
外部指针 ptr_a 不与外部变量 b共享存储器,也从不指向外部变量。 因此,将 7 分配给 ptr_a 点所指向的对象不会更改 b的值。 同样,外部指针 ptr_b 不与外部变量 a共享存储器,也从不指向外部变量。 编译器可以假定 another_function 的自变量具有值 6 ,并且不会从内存重新装入该变量。