Добрый день.
Есть структуры, которые нужно хранить в хэш-таблице.
При этом ключ хэш-таблицы это указатель (пусть для простоты будет указатель void*).
Посоветуйте, какую хеш-функцию лучше взять, чтобы было быстро и переносимо.
Пока что сделал что-то вроде этого:
typedef int hashtablelength;
hashtablelength hashfun(void* ptr){
hashtablelength hashvalue=0;
char* ptr1=(char*)(&ptr);
size_t l=sizeof(void*);
size_t i;
for(i=0;i!=l;++i){
hashvalue+=(hashtablelength)(ptr1[i]);
}//for
return hashvalue;
}
Вопросы:
1. Как у этого решения с переносимостью с точки зрения выравнивания данных.
2. Как у этого решения с переносимостью с точки зрения использования этого решения на экзотических платформах типа Гарвардской архитектуры, когда указатели разные для разных типов памяти?
3. Хотелось бы хэш-функцию без цикла, чтобы побыстрее было. Что можно предложить?
Спасибо.