是LZ4压缩64位兼容的源代码
Is the source code for LZ4 compression 64-bit compatible?
我刚刚下载了lz4-hc压缩的来源,并检查了64位兼容性。
我很少有人警告"从'__int64'转换为'unsigned int',可能会丢失数据"
当我继续挖掘时,我注意到Macro 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"answers" base"不远的情况下,我的LZ4是64位兼容...现在我必须更深入地研究逻辑才能检查。
我错过了什么吗?是否有人检查了该库是否有声称的完整64位兼容性?还有其他知道图书馆代码的问题吗?
lz4应该兼容64位。它已经进行了无数次测试。
LZ4-HC更复杂,也许还剩下一些编译器警告。请随时在问题列表中通知它们:http://code.google.com/p/lz4/issues/list
2个指针的缩写应该是size_t类型。size_t是64位CPU的64位。因此,将结果投入到32位可能会产生溢出问题。
这不太可能。LZ4在64 KB窗口上工作。这意味着,无视64KB以上的任何参考。为了使非常长的参考成为问题,它将完全需要4GB 几kb。更重要的是,由于列出了参考文献,因此有必要在&lt之间绝对零参考;64KB和> 4GB使用相同的哈希。这也是极不可能的。
即使那样,如果可以意图锻造这种情况,最终效果是将压缩机"暗示"朝向不匹配的位置。并将其在比较操作时将其丢弃。
因此,唯一的缺点是在无用的比较中失去几个CPU周期的风险。很公平。
尽管如此,每当"几乎免费"时,最好删除"编译器警告"。几乎可以自由地翻译成:没有表现丧失,对代码复杂性的影响微不足道。
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 是LZ4压缩64位兼容的源代码
- MySQL连接器C++64位在Visual Studio 2012中从源代码构建
- 与 32 位和 64 位应用程序相同的源代码的条件编译
- 在64位机器上从源代码构建32位mysql c++连接器
- 如何获得64位二进制的英特尔Fortran库,我缺乏源代码
- 维护32/64位构建的通用源代码,并使用正确的库
- 在64位Debian环境下编译32位qt源代码