我检查了CRC64的不同实现。例如,this、this和this。所有这些的问题在于它们都是与字节一起工作的。但是,在64位系统上,我想使用long (8字节)。这样,我将需要更少的迭代。例如,对于128字节的数据,使用byte,我需要迭代128次,而使用long,我只需要迭代16次。
是否有任何CRC64实现使用long,甚至使用大于一个字节的字长?这些计划是否可以修改以做到这一点?
发布于 2012-03-01 23:15:59
CRC计算使用一个技巧来避免逐位处理数据:它使用一个查询表,允许它一次处理多个比特。
一次处理n比特需要大小为2^n的查找表。您链接的实现一次读取1字节(8位),实际上它们都使用大小为256 == 2^8的查找表。
一次处理64位将需要2^64大小的查找表,这是不切实际的。这就是为什么常见的CRC实现一次处理一个字节的原因。
虽然可以使用65536个条目的数组一次处理2个字节,但由于使用了更多的CPU缓存,这可能会对性能产生负面影响。
https://stackoverflow.com/questions/9518166
复制相似问题