2004 年 5 月 27 日更新

Sun[tm] Studio 9:C 编译器自述文件

目录

  1. 简介
  2. 关于 Sun Studio 9:C 编译器
  3. 新特性和更改的特性
  4. 软件更正
  5. 问题和解决办法
  6. 限制和不兼容
  7. 文档错误

 


A. 简介

本文档包含 Sun[tm] Studio 9 C 编译器的相关信息。本文档描述了本发行版本的一些新功能,包括此发行版本作出的软件更正,并列出了已知的问题、限制和不兼容性。本文档中的信息优先于此发行版本各手册中的信息。

产品文档

要查看本自述的文本格式文件,请输入以下的命令:

   cc -xhelp=readme

如要查看本自述的 HTML 格式文件,请使用浏览器访问缺省安装目录:

file:/opt/SUNWspro/docs/index.html

注意—如果 Sun Studio 9 软件未安装在缺省 /opt 目录中,请询问系统管理员以获得系统中的等价路径。

 


B. 关于 Sun Studio 9:C 编译器C 编译器

此发行版本的 C 编译器可用于 Solaris[tm] 操作环境 (SPARC(R); Platform Edition) 版本 8、9 和 10,以及 Solaris 操作环境 (x86 Platform Edition) 版本 8、9 和 10。

该编译器在早于 Solaris 10 的操作系统上支持以 ISO/IEC 9899:1999,编程语言 - C 指定的大多数语言功能。在 Solaris 10 上,如果您指定 -xc99=all,lib,该编译器就完全与 C99 标准兼容。该编译器还与 ISO/IEC 9899:1990,编程语言 - C 标准兼容。

该开发版本中的 64 位 SPARC 架构特性支持 C 国际标准和 -xarch=v9

 


C. 新特性和更改的特性

本节描述了 C 编译器的本发行版本的新功能和更改功能。

新的 -xarch 缺省值:v8plus

现在,C 编译器为缺省体系结构生成的代码是 v8plus (UltraSPARC)。在将来的版本中将丢弃对 v7 的支持。

新的缺省值几乎可以为当前使用的所有机器提供更高的运行时性能。然而,对于计划在预装 UltraSPARC 计算机上部署的应用程序,缺省情况下将不在这些计算机上执行。使用 -xarch=v8 进行编译,以确保应用程序在这些计算机上执行。

如果您想在 v8 系统上进行部署,则必须在每个编译器命令行以及任何链接时命令中明确指定选项 -xarch=v8。提供的系统库在 v8 体系结构上运行。

如果您想在 v7 系统上进行部署,则必须在每个编译器命令行以及任何链接时命令中明确指定选项 -xarch=v7。提供的系统库使用 v8 指令集。对于 Sun Studio 9 发行版,v7 唯一支持的操作系统是 Solaris 8 发行版。遇到 v8 指令时,Solaris 8 操作系统解释软件中的指令。程序运行,但是性能并不下降。

对于 x86,-xarch 缺省设置为 generic。请注意,x86 上的 -fast 扩展至 -xarch=native

有关 -xarch 的更多信息,请参见 C 手册页 cc(1)。

新的 -xcode 缺省值

(SPARC) V9 上的缺省值为 -xcode=abs44。V8 上的缺省值还是 -xcode=abs32

有关 -xcode 的更多信息,请参见 C 手册页 cc(1)。

新的 -xmemalign 缺省值

(SPARC) 对于所有的 v8 体系结构,-xmemalign 的缺省值为 -xmemalign=8i。所有 v9 体系结构的缺省值为 -xmemalign=8s

有关 -xmemalign 的更多信息,请参见 C 手册页 cc(1)。

新的 -xprefetch 缺省值

(SPARC) 现在,-xprefetch 的缺省值是 -xprefetch=auto,explicit。此更改将对本质上为非线性内存访问模式造成不利影响。要禁用更改功能,请指定 -xprefetch=no%auto,no%explicit

有关 -xprefetch 的更多信息,请参见 C 手册页 cc(1)。

新的 -fast 扩展

现在,-fast 选项在其扩展中包括新的选项 -xlibmopt

新的 -O 扩展

(SPARC 和 x86)-O 宏现已扩展至 -xO3,而不是 -xO2

缺省情况下,更改将带来更高的运行时性能。但是,-x03 可能并不适合那些所有变量均被自动认为是 volatile 的程序。可能具有此假设的典型程序是实现其同步基元的设备驱动程序和较旧的多线程应用程序。其解决办法是使用 -xO2 而不是 -O 进行编译。

有关 -O 的更多信息,请参见 C 手册页 cc(1)。

为 Intel 体系结构提供新的 -xarch-xtarget-xchip 标志。

C 编译器支持在 Intel 系统上使用新的 -xarch-xtarget-xchip 标志。这些新标志针对 Intel 平台上的 ssesse2 指令进行了专门设计,以充分利用 Pentium 3 及 Pentium 4 芯片与 Solaris 软件支持相结合的优势。下面介绍了这些新标志:

遵照下列准则,您可以确定新的 -xarch-xchip-xtarget 标志的哪个组合符合您的需要:

有关 -xarch-xtarget-xchip 的更多信息,请参见 C 手册页 cc(1)。

新的 -xlibmopt-xnolibmopt 选项

-xlibmopt 选项使编译器能够使用优化的数学例程库。在指定该选项时,必须通过指定 -fround=nearest 来使用缺省的舍入模式。数学例程库对性能进行了优化,通常可以生成更快的代码。其结果可能与普通的数学库得出的结果稍有不同。如果确实如此,其不同之处通常表现在最后一位上。

通过在命令行上指定新的 -xnolibmopt 选项,可以显式关闭此库。

有关 -xlibmopt-xnolibmopt 的更多信息,请参见 C 手册页 cc(1)。

新的 -xipo_archive 选项

编译器使用新的 -xipo_archive 选项可以优化传递给链接程序的对象文件、使用 -xipo 编译的对象文件以及在生成可执行文件之前驻留在归档库 (.a) 中的对象文件。库中包含的任何对象文件在编译过程中进行优化后都会被其优化的版本替换。

有关 -xipo_archive 选项的更多信息,请参见 cc(1) 手册页。

新的 -xprefetch_auto_type 选项

使用新的 -xprefetch_auto_type 选项能够以与生成直接内存访问预取相同的方式,为选项 -xprefetch_level=[1|2|3] 指示的循环生成间接预取。

诸如 -xdepend-xrestrict-xalias_level 等选项可以改进 -xprefetch_auto_type 的优化特性。它们将影响计算间接预取侯选对象的激进度,从而将影响自动间接预取插入的激进度,因为它们有助于生成更准确的内存别名二义性信息。

有关 -xprefetch_auto_type 选项的更多信息,请参见 cc(1) 手册页。

使用 -xpch 自动生成的预编译头文件

此版本的 C 编译器扩展了预编译头文件功能,以包括在编译器中生成预编译头文件的自动功能。您也可以选择手动生成预编译头文件,但是,如果您对编译器的新功能感兴趣的话,请参见 cc(1) 手册页中 -xpch 选项的扩展功能,以了解更多信息。另请参见 CCadmin(1) 手册页。

通过新的 -xchip-xtarget 标志扩展了 SPARC 支持。

(SPARC) 现在,-xchip-xtarget 选项支持 ultra3iultra4 作为其值,因此您可以构建为 UltraSPARC IIIi 和 UltraSPARC IV 处理器进行了优化的应用程序。

支持外部内联函数

按照 1999 C ISO 标准的规定,现在可以使用内联函数定义和外部内联函数。

内联函数定义是使用关键字 inline(而不是关键字 staticextern)定义的函数,并且源文件(或包含的文件)中出现的所有原型也包含关键字 inline,而不包含关键字 staticextern

内联函数定义没有为函数提供外部定义。在调用点对函数定义进行内联或对外部定义函数的引用将满足包含内联定义的源文件中出现的任何函数调用。

如果已指定了 -xO3 或更高级别,则编译器将仅内联对内联定义的调用,并且编译器优化程序认为这样做非常有利。否则将调用外部函数。因此,包含内联定义的任何程序均应与包含外部函数定义的对象文件链接在一起。

将关键字 externinline 同时与函数定义一起使用(或在继续进行函数定义的文件中的任何原型上使用)将导致在该对象文件中定义外部函数。兼容与包含多个外部内联函数定义的对象相链接的 C++ 将导致链接程序仅选择其中一个函数来满足任何外部引用。

要获得符合标准的行为,必须使用当前的编译器对旧代码进行编译。但是,如果在原有的 C and C++ 二进制文件(C/C++ 5.6 之前)中有外部内联函数定义,并且您希望将这些二进制文件与新的 C 和 C++ 二进制文件链接且不更改原有二进制文件的行为,请指定 -features=no%extinl

有关 -features 的更多信息,请参见 C 手册页 cc(1)。

指定的初始化程序

指定的初始化程序为初始化稀疏数组提供了一种机制,这种数组在实际数值编程中很常见。

指定的初始化程序可以初始化稀疏结构(在系统编程中很常见),并且可以通过任何成员来初始化联合,而不管该成员是否为第一个成员。

请看下面的这些示例。第一个示例说明了如何使用指定的初始化程序来初始化数组:

enum { first, second, third };
const char *nm[] = {
[third] = "third member",
[first] = "first member",
[second] = "second member",
    };

这个示例说明了如何使用指定的初始化程序来初始化结构对象的字段:

division_t result = { .quot = 2, .rem = -1 };

这个示例说明了如何使用指定的初始化程序来初始化在其他方面可能会被误解的复杂结构:

struct { int z[3], count; } w[] = { [0].z = {1}, [1].z[0] = 2 };

通过使用单个指示器,可以从两端创建数组。

int z[MAX] = {1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0};
如果 MAX 大于 10,则数组将在中间包含取值为零的元素;如果 MAX 小于 10,则前五个初始化程序提供的某些值将被随后五个初始化程序提供的值覆盖。

联合的任何成员均可初始化:

union { /* ...*/ } u = { .any_member = 42 };

通用字符名 (UCN)

UCN 允许在 C 源代码中使用任何字符,而不仅限于英文字符。UCN 采用以下格式:

UCN 不得指定小于 00A0 的值(0024 ($)、0040 (@) 或 0060 (?) 除外),也不得指定相容范围为 D800 到 DFFF 之间的值。

UCN 可以用于标识符、字符常量和字符串文字中,以指定 C 基本字符集中不包含的字符。

UCN \Unnnnnnnn 指定了其八位短标识符(按照 ISO/IEC 10646 的规定)为 nnnnnnnn 的字符。同样,通用字符名 \unnnn 指定了其四位短标识符为 nnnn(其八位短标识符为 0000nnnn)的字符。

新的 -flteval 选项

(Intel) 使用该选项可以控制如何评估浮点表达式。

关于 -flteval 选项的更多信息,请参见 cc(1) 手册页。

通过 lint 执行新的安全性检查

This release of the lint utility features a new security-checking facility.在编译之前使用新增的 -errsecurity 选项可以检查代码的安全能力。

-errsecurity[={core, standard, extended, %none}]

lint -errsecurity=core
这一级别将检查几乎总是处于不安全状态或难以验证的源代码结构。此级别的检查包括:

将在该级别生成警告信息的源代码视为错误。对可疑的源代码应进行更改。在所有情况下,均可直接采用更安全的可选方案。

lint -errsecurity=standard
这一级别包括核心级别的所有检查以及对可能安全但还有更好的可选方案的结构进行的检查。在检查新写入的代码时建议采用这一级别。此级别的额外检查包括:

将在该级别产生警告信息的源代码替换为新的或显著修改的代码。在原有的代码中纠正这些警告时应权衡应用程序不稳定所存在的风险。

lint -errsecurity=extended
这一级别包含一套最完整的检查,包括来自核心级别和标准级别的一切。此外还会生成许多有关在某些情况下可能不安全的结构的警告。作为查看代码的辅助方法,但不必用作可接受源代码必须符合的标准,这一级别的检查非常有用。此级别的额外检查包括:

检查在该级别产生警告信息的源代码以确定是否存在潜在的安全问题。

如果未指定 -errsecurity 的设置,则编译器会将其设置为 -errsecury=%none。如果未指定 -errsecurity,但它并非参数,则编译器会将其设置为 -errsecurity=standard

 


D. 软件更正

目前没有新的信息。

 


E. 问题和解决办法

本节讨论了已知的软件问题及其可能的解决方法。关于更新和补丁程序,请查看更新信息,网址为 http://developers.sun.com/prodtech/cc/support_index.html


F. 限制和不兼容

本节讨论系统或其他软件的限制和不兼容。有关该发行版本 Sun ONE Studio 9 的最新信息,请参见《Sun Studio 9 发行说明》。发行说明可在 Sun Studio 9 网站上找到,网址是:http://developers.sun.com/prodtech/cc/ss9/reference/docs/releasenotes.pdf

在打印本文档时,尚未发现新信息。


G. 文档错误

目前没有新的信息。

 


版权所有 © 2004 Sun Microsystems, Inc. 保留所有权利。必须依据许可证条款使用。