Насчет того, что у Вас unicode - т.е. 16 бит на символ, так это процессору все-равно, он как минимум 16-битными операндами и оперирует.
Ну это Вы бросьте
Может оперировать с байтами - CMP AL,1
может со словами (16 бит) - CMP AX,1
может с двойными словами (32 бита) - CMP EAX,1
Блин, вот так всегда - пишешь одно, а подразумеваешь совсем другое. Сейчас перечитал свое заявление - действительно ерунда. На самом деле я имел ввиду следующее:
В данном конкретном случае компилятор и ассемблер, с высокой степенью вероятности, сгенерируют код, который записывает наш char в 16-битный (а еще более вероятно, в 32 битный) регистр целиком. Соответственно, 8 или 16 бит занимал наш символ, в данном случае - все равно (для времени исполнения).
А мое убеждение, что процессор в конце концов будет работать с 16 (или с 32) разрядным числом подтверждается фразой из "Intel® 64 and IA-32 Architectures Optimization Reference Manual", раздел "3.2 PROCESSOR PERSPECTIVES" (ну и банальной логикой - вряд ли процессоры настолько поумнели, что могут сами загрузить в AL один байт, в AH следующий, и скормить это все в Integer Unit (запараллелить два сравнения), а потом еще и разобрать, какой из байтов не прошел сравнение, и что делать дальше):
Intel® 64 and IA-32 Architectures Optimization Reference Manual писал(а):
Dependencies for partial register writes incur large penalties when using the
Pentium M processor (this applies to processors with CPUID signature family 6,
model 9). On Pentium 4, Intel Xeon processors, Pentium M processor (with
CPUID signature family 6, model 13), such penalties are relieved by artificial
dependencies between each partial register write. Intel Core Solo, Intel Core Duo
processors and processors based on Intel Core microarchitecture can experience
minor delays due to partial register stalls. To avoid false dependences from
partial register updates, use full register updates and extended moves.
Таким образом рекомендуется работать с целыми регистрами для избежания проблем с ложными взаимозависимостями при записи в половинные регистры.
А операнды инструкций, конечно, могут быть 8-битными.-- Пт окт 09, 2009 13:04:17 --Maslov писал(а):
Естественно, во всех случаях вариант с хэшами будет работать быстрее, но в связи с тем, что его немного сложнее реализовать, я бы сначала все таки проверил работу напрямую со строками - может быть и в этом случае скорости окажется достаточно.
1. Не во всех, а только когда длина строки сильно больше длины хэша
.
2. По сложности реализации я как раз уверен в обратном - реализация простейшей контрольной суммы (а ее тут ИМХО вполне достаточно) - значительно проще, чем, даже, сортировка пузырьком. А тут, конечно, надо что-то побыстрее, чем сортировка пузырьком.