[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека |
Юридическая информация |
Поиск ]
Руководство по настройке производительности
Многоязычное приложение может работать слишком медленно, если программист
не знаком с некоторыми особенностями применения наборов многобайтовых
символов, позволяющими эффективно выполнять программы в многобайтовой среде с
ограниченным использованием языковых функций. Например:
- Во всех кодовых наборах, поддерживаемых фирмой IBM, символы с кодами от
0x00 до 0x3F не изменяются и соответствуют стандартной кодировке ASCII.
Это означает, что их битовые последовательности никогда не входят в состав
многобайтового символа. Так как пустой символ входит в этот набор,
функции strlen(), strcpy() и strcat() могут
работать со строками как многобайтовых, так и однобайтовых символов.
Программист должен помнить, что strlen() возвращает число байт в
строке, а не число символов.
- Аналогично, стандартная функция strchr(foostr, '/')
будет правильно работать во всех локалях, так как символ "/" (косая черта)
входит в набор уникальных кодовых знаков. Значительная часть
стандартных разделителей входят в диапазон 0x00 - 0x3F, поэтому большинство
задач синтаксического анализа можно выполнять без использования языковых
функций или преобразования в формат wchar_t.
- Операции сравнения строк подразделяются на два класса - проверка равенства
и проверка неравенства. Для сравнения строк применяется стандартная
функция strcmp(). Условие
if (strcmp(foostr,"a rose") == 0)
означает, что необходим в точности текст "a rose". Если
строка foostr содержит текст "a rosE", то такое
вхождение найдено не будет.
- Проверка неравенства применяется для упорядочения строк в соответствии с
правилами текущей локали. В этом случае следует применять
if (strcoll(foostr,barstr) > 0)
что приводит к снижению производительности из-за чтения информации об
упорядочении для каждого символа.
- При запуске программы всегда устанавливается локаль C. Если в
программе будет применяться поддержка языковых функций, включая работу с
каталогами сообщений, необходимо выполнить команду
setlocale(LC_ALL, "");
для установки локали родительского процесса перед вызовом языковых
функций.
[ Страница назад | Страница вперед | Содержание | Индекс |
Библиотека |
Юридическая информация |
Поиск ]