很多人都不明白AIX语言环境和执行速度有什么关系。今天,我们就来讲解下AIX语言环境和执行速度的问题。本地语言支持(NLS)使应用不同AIX语言环境的操作系统变得十分便利。因为广泛应用 NLS 对于从系统获取***性能变得越来越重要,因此本附录包含了一个对于 NLS 的简短回顾。
NLS 允许操作系统定制为适合个别用户语言和文化期望。一个AIX语言环境是语言和地理或者文化需求的特定组合,它由一个复合名称来标识,例如 en_US(美国英语)。
对于每个受支持的AIX语言环境,它们有一套消息编目、校勘值表和其它定义该语言环境的要求的信息。当安装了操作系统以后,系统管理器可选择应安装哪个语言环境。然后,各用户可以通过更改 LANG 和 LC_ALL 变量来控制每个 shell 的语言环境。
不符合上述结构的一个AIX语言环境是 C(或 POSIX)语言环境。除非用户明确地选择另一个环境,否则 C 语言环境是系统缺省语言环境。每个新派生的进程也是再此语言环境中开始的。运行 C 语言环境最接近于操作系统在 UNIX 的原始的单语言格式中运行。没有 C 消息编目。相反,尝试从编目中获取消息的程序返回已编译进程序的默认消息。一些命令,如 sort 还原至它们原始的特定于字符集的算法。
NLS 的性能通常分为三个区域。C 语言环境对于执行命令通常是最快的,接下来是单字节(拉丁字母)语言环境,如 en_US,而多字节语言环境执行命令最慢。
一些简单的规则
如果程序员未注意到多字节字符集设计的一些限制(这些限制允许许多程序在多字节语言环境中高效运行而几乎不用国际化函数)则可能编写出缓慢、多语言应用程序。例如:
· 在 IBM 支持的所有代码集中,字符代码 0x00 到 0x3F 是唯一的,并对 ASCII 标准字符进行编码。唯一是指这些位组合不会作为多字节字符的字节之一字节出现。因为空字符是该集的一部分,所以 strlen()、strcpy() 和 strcat() 函数用来处理多字节以及单字节字符串。程序员必须牢记 strlen() 返回的值是字符串中的字节数,而不是字符数。
· 同样地,标准字符串函数 strchr(foostr, '/') 在所有AIX语言环境下都运行正常,因为 /(斜杠)是唯一代码点范围的一部分。实际上,大多数标准定界符在 0x00 到 0x3F 的范围内,所以大部分语法分析不用依赖国际化函数或或转化为 wchar_t 格式就能完成。
· 字符串的比较会出现两类情况:相等或不等。使用标准 strcmp() 函数来执行比较。当你写入:
if (strcmp(foostr,"a rose") == 0)
您不是在用其它任何名称查找 "a rose";您仅在查找该位集。如果 foostr 包含 "a rosE" ,则未找到任何匹配的字符。
· 当你要尝试在AIX语言环境定义的校勘序列中排列字符串时,将发生不等比较。在那种情况下,你应使用:
if (strcoll(foostr,barstr) > 0)
并且为获取每个字符的校勘信息要付出性能代价。
· 当执行程序时,它始终 C 语言环境中开始。如果它将使用一个或多个国际化函数(包括访问消息目录)则它必须执行:
setlocale(LC_ALL, "");
以在调用任何国际化函数前切换至其父进程的语言环境。
到这里,我们应该懂得AIX语言环境和执行速度的关系了。
【编辑推荐】