内容简介:关于该算法的优化也经常是大家关心的一个方向,现在最常用的实现基本都是查表法,下图是别人总结的相关算法的优化历史:
CRC算法
循环冗余校验-CRC 是常用的一种校验数据一致性的算法。关于其原理与发展可以参考其维基百科。
关于该算法的优化也经常是大家关心的一个方向,现在最常用的实现基本都是查表法,下图是别人总结的相关算法的优化历史:
可以看出,当因特尔提出了 slice-by-x
的优化后,其速度得到的飞跃。
然而CRC算法的变种数量非常之多,但是已经被实现的那些优化只是少数的几种,比如 ISO
、 ECMA
等。同时这些优化后的代码已经丢失的大量中间过程,是的其难以被移植到其他变种之上。
优化变种算法
经过一番研究考证,CRC64变种采用 slice-by-x
优化的主要步骤为:
- 将原始查询表转化为8重表格
// table[0] 是原始查询表, table[1...7] 是生成的8重表格 for (n = 0; n < 256; n++) { crc = table[0][n]; for (k = 1; k < 8; k++) { crc = table[0][crc & 0xff] ^ (crc >> 8); table[k][n] = crc; } }
- 优化CRC算法,每个循环计算8个字节
while (len >= 8) { crc ^= *(uint64_t *)byte; // 小端计算方式 crc = table[7][crc & 0xff] ^ table[6][(crc >> 8) & 0xff] ^ table[5][(crc >> 16) & 0xff] ^ table[4][(crc >> 24) & 0xff] ^ table[3][(crc >> 32) & 0xff] ^ table[2][(crc >> 40) & 0xff] ^ table[1][(crc >> 48) & 0xff] ^ table[0][crc >> 56]; byte += 8; len -= 8; } while (len) { crc = table[0][(crc ^ *byte++) & 0xff] ^ (crc >> 8); len--;
实现
github.com/lrita/crc64 采用上述方法,优化了 redis
使用的 CRC64 变种算法,使其速度从 381.29 MB/s
提升到 1474.16 MB/s
.
参考
以上所述就是小编给大家介绍的《优化变种CRC算法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 致远 OA 变种 BASE64 算法的加解密方法
- 警惕Rapid勒索病毒新变种
- Satan变种病毒分析处置手册
- Bluehero挖矿蠕虫变种空降!
- AgentTesla新变种窃取WiFi密码
- 勒索病毒(CrySiS家族)最新变种分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective Java
Joshua Bloch / Addison-Wesley Professional / 2018-1-6 / USD 54.99
The Definitive Guide to Java Platform Best Practices—Updated for Java 9 Java has changed dramatically since the previous edition of Effective Java was published shortly after the release of Jav......一起来看看 《Effective Java》 这本书的介绍吧!