AIX語言環(huán)境和執(zhí)行速度的問題
很多人都不明白AIX語言環(huán)境和執(zhí)行速度有什么關(guān)系。今天,我們就來講解下AIX語言環(huán)境和執(zhí)行速度的問題。本地語言支持(NLS)使應(yīng)用不同AIX語言環(huán)境的操作系統(tǒng)變得十分便利。因為廣泛應(yīng)用 NLS 對于從系統(tǒng)獲取***性能變得越來越重要,因此本附錄包含了一個對于 NLS 的簡短回顧。
NLS 允許操作系統(tǒng)定制為適合個別用戶語言和文化期望。一個AIX語言環(huán)境是語言和地理或者文化需求的特定組合,它由一個復(fù)合名稱來標(biāo)識,例如 en_US(美國英語)。
對于每個受支持的AIX語言環(huán)境,它們有一套消息編目、??敝当砗推渌x該語言環(huán)境的要求的信息。當(dāng)安裝了操作系統(tǒng)以后,系統(tǒng)管理器可選擇應(yīng)安裝哪個語言環(huán)境。然后,各用戶可以通過更改 LANG 和 LC_ALL 變量來控制每個 shell 的語言環(huán)境。
不符合上述結(jié)構(gòu)的一個AIX語言環(huán)境是 C(或 POSIX)語言環(huán)境。除非用戶明確地選擇另一個環(huán)境,否則 C 語言環(huán)境是系統(tǒng)缺省語言環(huán)境。每個新派生的進(jìn)程也是再此語言環(huán)境中開始的。運行 C 語言環(huán)境最接近于操作系統(tǒng)在 UNIX 的原始的單語言格式中運行。沒有 C 消息編目。相反,嘗試從編目中獲取消息的程序返回已編譯進(jìn)程序的默認(rèn)消息。一些命令,如 sort 還原至它們原始的特定于字符集的算法。
NLS 的性能通常分為三個區(qū)域。C 語言環(huán)境對于執(zhí)行命令通常是最快的,接下來是單字節(jié)(拉丁字母)語言環(huán)境,如 en_US,而多字節(jié)語言環(huán)境執(zhí)行命令最慢。
一些簡單的規(guī)則
如果程序員未注意到多字節(jié)字符集設(shè)計的一些限制(這些限制允許許多程序在多字節(jié)語言環(huán)境中高效運行而幾乎不用國際化函數(shù))則可能編寫出緩慢、多語言應(yīng)用程序。例如:
· 在 IBM 支持的所有代碼集中,字符代碼 0x00 到 0x3F 是唯一的,并對 ASCII 標(biāo)準(zhǔn)字符進(jìn)行編碼。唯一是指這些位組合不會作為多字節(jié)字符的字節(jié)之一字節(jié)出現(xiàn)。因為空字符是該集的一部分,所以 strlen()、strcpy() 和 strcat() 函數(shù)用來處理多字節(jié)以及單字節(jié)字符串。程序員必須牢記 strlen() 返回的值是字符串中的字節(jié)數(shù),而不是字符數(shù)。
· 同樣地,標(biāo)準(zhǔn)字符串函數(shù) strchr(foostr, '/') 在所有AIX語言環(huán)境下都運行正常,因為 /(斜杠)是唯一代碼點范圍的一部分。實際上,大多數(shù)標(biāo)準(zhǔn)定界符在 0x00 到 0x3F 的范圍內(nèi),所以大部分語法分析不用依賴國際化函數(shù)或或轉(zhuǎn)化為 wchar_t 格式就能完成。
· 字符串的比較會出現(xiàn)兩類情況:相等或不等。使用標(biāo)準(zhǔn) strcmp() 函數(shù)來執(zhí)行比較。當(dāng)你寫入:
if (strcmp(foostr,"a rose") == 0)
您不是在用其它任何名稱查找 "a rose";您僅在查找該位集。如果 foostr 包含 "a rosE" ,則未找到任何匹配的字符。
· 當(dāng)你要嘗試在AIX語言環(huán)境定義的??毙蛄兄信帕凶址畷r,將發(fā)生不等比較。在那種情況下,你應(yīng)使用:
if (strcoll(foostr,barstr) > 0)
并且為獲取每個字符的校勘信息要付出性能代價。
· 當(dāng)執(zhí)行程序時,它始終 C 語言環(huán)境中開始。如果它將使用一個或多個國際化函數(shù)(包括訪問消息目錄)則它必須執(zhí)行:
setlocale(LC_ALL, "");
以在調(diào)用任何國際化函數(shù)前切換至其父進(jìn)程的語言環(huán)境。
到這里,我們應(yīng)該懂得AIX語言環(huán)境和執(zhí)行速度的關(guān)系了。
【編輯推薦】