我检查了CRC64的不同实现。例如,this,this和this。所有这些的问题是它们使用字节。但是,在64位系统上,我想使用long
(8个字节)。通过这种方式,我需要减少迭代次数。例如,对于128字节的数据,使用byte
,我需要迭代128次,而使用long
,我需要迭代16次。
是否存在使用long
或甚至大于一个字节的字大小的CRC64实现?可以修改这些方案吗?
答案 0 :(得分:13)
CRC计算使用技巧来避免必须逐位处理数据:它使用查找表,允许它一次处理多个位。
一次处理n
位需要一个大小为2^n
的查找表。您链接的实现一次读取1个字节(8位),实际上它们都使用大小为256 == 2 ^ 8的查找表。
一次处理64位将需要大小为2 ^ 64的查找表,这是不实际的。这就是CRC的常见实现一次处理1个字节的原因。
虽然使用65536条目阵列一次可以处理2个字节,但由于使用了更多的CPU缓存,这可能会对性能产生负面影响。