我有一個表示堆棧幀的(64位)地址列表,我想將它們散列爲一個64位數字以幫助識別那些已經前面看過。最多有128個地址。用於(內存)地址列表的良好哈希算法
我目前的算法通過迭代遍歷列表來計算散列,將每個地址變爲散列並將散列旋轉11個位,每個週期。
有什麼更好的建議嗎?
我有一個表示堆棧幀的(64位)地址列表,我想將它們散列爲一個64位數字以幫助識別那些已經前面看過。最多有128個地址。用於(內存)地址列表的良好哈希算法
我目前的算法通過迭代遍歷列表來計算散列,將每個地址變爲散列並將散列旋轉11個位,每個週期。
有什麼更好的建議嗎?
有幾個不錯的整數哈希函數在這裏,爲32位和64位: http://www.concentric.net/~Ttwang/tech/inthash.htm
也有一些關於它寫在這裏:http://burtleburtle.net/bob/hash/evahash.html
如果性能不是問題,您可以嘗試加密散列 - 截斷所需的字節數。
爲什麼哈希他們,而不是隻是將它們轉換爲intptr_t(假設C)? – Christoph 2008-12-22 17:20:07
我想他正在試圖檢查程序路徑。他試圖保存64位地址的路徑。 CRC64答案似乎對我很好。 – Harvey 2008-12-22 17:57:57