Эффективный хэш-код () реализация

Я упомяну другой сценарий, в котором летучие вещества важны.

Предположим, вы отображаете в памяти файл для более быстрого ввода-вывода, и этот файл может измениться за кулисами (например, файл не находится на вашем локальном жестком диске, а вместо этого обслуживается по сети другим компьютером).

Если вы обращаетесь к данным отображенного в памяти файла через указатели на энергонезависимые объекты (на уровне исходного кода), то код, сгенерированный компилятором, может извлекать одни и те же данные несколько раз, даже если вы об этом не знаете.

Если эти данные изменятся, ваша программа может использовать две или более разных версий данных и перейти в несовместимое состояние. Это может привести не только к логически некорректному поведению программы, но и к уязвимым местам в ней, если она обрабатывает ненадежные файлы или файлы из ненадежных местоположений.

Если вы заботитесь о безопасности, и вам следует, это важный сценарий для рассмотрения.

13
задан Adamski 2 July 2009 в 14:00
поделиться

1 ответ

Умножение на 31 выполняется быстро, потому что JIT может преобразовать его в сдвиг влево на 5 бит и вычитание:

x * 31 == (x << 5) - x

Без какой-либо дополнительной информации я бы придерживался этого подходить. Это достаточно быстро и, вероятно, в конечном итоге будет иметь достаточно хорошо распределенные хэш-коды, и это также легко сделать правильно :)

Размер набора данных на самом деле не имеет значения, но если у вас есть конкретная дополнительная информация о значениях, которые вы Если вы будете работать (например, «всегда даже»), то вы можете разработать лучшую хеш-функцию. Я бы сначала подождал, пока это не станет реальной проблемой :)

Буду придерживаться этого подхода. Это достаточно быстро и, вероятно, в конечном итоге будет иметь достаточно хорошо распределенные хэш-коды, и это также легко сделать правильно :)

Размер набора данных на самом деле не имеет значения, но если у вас есть конкретная дополнительная информация о значениях, которые вы Если вы будете работать (например, «всегда даже»), то вы можете разработать лучшую хеш-функцию. Я бы сначала подождал, пока это не станет реальной проблемой :)

Буду придерживаться этого подхода. Это достаточно быстро и, вероятно, в конечном итоге будет иметь достаточно хорошо распределенные хэш-коды, и это также легко сделать правильно :)

Размер набора данных на самом деле не имеет значения, но если у вас есть конкретная дополнительная информация о значениях, которые вы Если вы будете работать (например, «всегда даже»), то вы можете разработать лучшую хеш-функцию. Я бы сначала подождал, пока это не станет реальной проблемой :)

) тогда вы можете разработать лучшую хэш-функцию. Я бы сначала подождал, пока это не станет реальной проблемой :)

) тогда вы можете разработать лучшую хэш-функцию. Я бы сначала подождал, пока это не станет реальной проблемой :)

21
ответ дан 1 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: