我剛剛下載了LZ4-HC壓縮的源代碼並檢查它是否具有64位兼容性。LZ4壓縮64位兼容的源代碼?
我'得到一些警告「從‘__int64’到‘無符號整型’,可能丟失數據的轉換」
當我不停地挖,我注意到宏觀ADD_HASH(P)。宏觀的最後一部分是
HashTable[HASH_VALUE(p)] = (p) - base;
p - const BYTE*
base - const BYTE* const for 64-bit. (const int b - for 32-bit)
HTYPE HashTable[];
HTYPE is U32 for 64-bit platform (const BYTE* - for 32-bit)
什麼是32位發生 - 我們減去const int的指針從存儲進另一個指針 - 足夠安全。
現在64: 它在我看來,減少兩個指針64並將它們保存到U32是不安全的!
我的理解是,只有在保證「p」和「base」相距不遠的情況下,LZ4才能兼容64位,現在我必須深入挖掘邏輯來檢查它。
我錯過了什麼嗎?有沒有人檢查這個庫的完整64位兼容性,因爲它聲稱是?有關庫代碼的其他任何已知問題?