将变量标记为局部或已导入

编译器假定已导入应用程序中的所有变量,但使用 -qdatalocal-qdataimported 可以将变量标记为本地或已导入。 编译器将优化基于程序变量的静态或动态绑定规范的应用程序。

-qdatalocal

局部变量存储在与程序或共享库唯一绑定的特殊内存段中。 指定 -qdatalocal 选项以标识要作为已编译程序或共享库的本地变量。 您可以指定不带参数的选项,以指示所有相应的变量都是局部变量。 或者,您可以将以冒号分隔的名称列表附加到选项,以仅将部分程序参数视为本地参数。

如果可以,那么会将标记为本地的变量直接嵌入到称为目录 (TOC) 的结构中,而不是嵌入到单独的全局内存中。 先决条件是变量的存储必须不超过要嵌入到 TOC 中的指针大小。 通常,指向数据的指针存储在 TOC 中。 -qdatalocal 选项允许将数据直接存储在 TOC 中,从而减少从两个装入指令到一个装入指令的数据访问。

-qdataimported

导入的变量根据缺省内存分配方案进行存储。 -qdataimported 选项是缺省数据绑定机制。 指定该选项意味着数据对链接的其他程序或共享库可视。 因此,将变量名称指定为 -qdataimported 选项的自变量或使用 -qdataimported 选项进行编译而不单独使用自变量将不会产生任何影响。

当您将 -qdataimported 选项与 -qdatalocal结合使用时,该选项很有用。 由于您不太可能将所有数据存储在 TOC 中,因此 -qdataimported 选项可以覆盖程序或共享库外部的变量的 -qdatalocal 。 例如,使用选项 -qdatalocal -qdataimported=<variable> 将所有全局数据存储在 TOC 中,但 <variable>除外。