我刚刚下载了 LZ4-HC 压缩源并检查了它的 64 位兼容性。
我很少收到警告“从 '__int64' 转换为 'unsigned int',可能丢失数据”
当我继续挖掘时,我注意到宏 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 位?图书馆代码的任何其他已知问题?