CRC32和CRC32C有什么区别?我知道CRC32已经很久了,但今天才听说CRC32C。它们基本上是相同的方法吗(即对于给定数据,两者都产生相同的哈希值)?
在zip和许多其他地方发现的CRC32使用的是多项式0x04C11DB7;它的反转形式0xEDB88320可能更为人所知,因为它经常出现在小端实现中。
CRC32C使用不同的多项式(0x1EDC6F41,反转0x82F63B78),但计算方式相同。结果是不同的,这也被称为Castagnoli CRC32,并且最显著地出现在新的Intel CPU中,这些CPU可以在3个周期内计算完整的32位CRC步骤。这就是CRC32C变得越来越流行的原因,因为它允许高级实现,有效地处理每个周期的一个32位字(通过并行处理3个数据流并使用线性代数来组合结果以使三个周期的延迟起作用)。
crc32
指令可以处理 8 字节(64 位)的数据,其延迟为 3 个时钟周期,因此顺序吞吐量约为每个时钟周期 ~2.67 字节,而最优的 3 倍并行版本接近每个时钟周期处理 8 字节。 - ZachB