Быстрый двунаправленный -хэш двух целых чисел на C

Я пишу модуль ядра Linux, и мне нужно придумать хеш-функцию, которая принимает на вход два целых числа. Поскольку код работает в пространстве ядра, ни одна из стандартных библиотек мне недоступна.

По сути, мне нужна хэш-функция, в которой:

hash(a, b) = c
hash(b, a) = c

Где допустимыми входными данными для a и b являются беззнаковые 32 -битовые целые числа. Функция хеширования должна возвращать 64 -битное целое число без знака. Столкновение (, то есть хэш (a, b )= c и хэш (d, f )= c, а также )нежелательны, поскольку эти значения будут использоваться в двоичном дереве поиска. Результатом поиска является связанный список возможных результатов, который затем повторяется, где действительно сравниваются a и b. Таким образом, некоторое столкновение допустимо, но чем меньше столкновений, тем меньше требуется итераций и тем быстрее он будет работать.

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

Спасибо за ваше время.

7
задан Blake Beaupain 2 August 2012 в 22:17
поделиться