我已经检查了不同的CRC64实现。例如,这个、这个和这个。所有这些实现的问题是它们使用字节处理数据。然而,在64位系统上,我希望使用long(8字节)来处理数据。这样,我需要迭代的次数就会更少。例如,对于128字节的数据,使用一个byte,我需要迭代128次,而使用long,我只需要迭代16次。 是否有任何使用long甚至比字节更大的字长的CRC64实现?这些方案能够修改以实现这一点吗?
CRC校验使用了一种技巧,避免需要逐位处理数据:它使用了一个查找表,使其可以同时处理多个比特位。 同时处理n个比特位需要一个大小为2^n的查找表。你提供的实现每次读取1字节(8位),因此它们都使用了大小为256 == 2^8的查找表。 要同时处理64位,则需要使用大小为2^64的查找表,这是不可行的。这就是为什么常见的CRC实现每次只处理1字节的原因。 虽然使用一个65536项的数组可以同时处理2字节,但由于使用更多的CPU高速缓存内存,这很可能会产生负面的性能影响。