16个稳定版本
使用旧的Rust 2015
1.4.2 | 2024年5月20日 |
---|---|
1.4.0 | 2024年2月12日 |
1.3.2 | 2022年2月8日 |
1.3.0 | 2021年11月30日 |
1.0.4 | 2018年11月30日 |
#1 in 硬件支持
7,510,218 每月下载量
在 14,209 个Crates中使用(直接使用288个)
84KB
1K SLoC
crc32fast
快速、SIMD加速的CRC32(IEEE)校验和计算
使用方法
简单使用
对于简单用例,您可以直接调用hash
便捷函数来计算给定字节的CRC32校验和
let checksum = crc32fast::hash(b"foo bar baz");
高级使用
对于需要更多灵活性和性能的用例,例如处理大量数据时,您可以创建并操作一个Hasher
use crc32fast::Hasher;
let mut hasher = Hasher::new();
hasher.update(b"foo bar baz");
let checksum = hasher.finalize();
性能
该crate包含多个CRC32实现
- 一个快速的基准实现,每次迭代处理多达16个字节
- 一个针对现代
x86
优化的实现,使用sse
和pclmulqdq
指令 - 一个针对
aarch64
优化的实现,使用crc32
指令
在运行时调用Hasher::new
构造函数将执行功能检测,以选择最适合当前CPU功能集的最优实现。
crate | 版本 | 变体 | ns/iter | MB/s |
---|---|---|---|---|
crc | 1.8.1 | n/a | 4,926 | 207 |
crc32fast(此crate) | 1.0.0 | 基准 | 683 | 1499 |
crc32fast(此crate) | 1.0.0 | pclmulqdq | 140 | 7314 |
内存安全
由于优化实现中使用了SIMD内联函数,该crate包含一些unsafe
代码。
为确保内存安全,相关代码已经使用afl.rs进行了模糊测试,在debug
和release
构建配置下进行了数百万次迭代。您可以在fuzz
子目录中检查测试设置,其中还包含了如何自行运行测试的说明。
此外,每个提交都通过CI中的地址清理器进行测试,以捕获任何越界内存访问。
尽管模糊测试和清理都没有发现任何安全漏洞,但如果您遇到任何崩溃或其他意外行为,请不要犹豫,提交问题。
可用功能标志
std
(默认:启用)
此库支持在不使用Rust std
库的情况下进行构建,这对于没有操作系统的嵌入式等低级用例非常有用。要在no_std
环境中构建crate,请禁用默认的std
功能。
注意:由于运行时CPU功能检测需要操作系统支持,当禁用std
功能时,专门的SIMD实现将不可用。
nightly
(默认:禁用)
此功能标志启用了仅在nightly
频道上可用的不稳定功能。请注意,当启用此功能标志时,在更新编译器版本时可能会遇到破坏性更改。
目前,启用此功能标志将使优化的aarch64
实现可用。
许可证
本项目受以下任一许可证的许可:
- Apache License,版本2.0,LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0
- MIT许可证LICENSE-MIT或http://opensource.org/licenses/MIT
任选其一。
贡献
除非您明确声明,否则您提交的任何有意包含在本项目中的贡献,根据Apache-2.0许可证定义,应如上所述双重许可,不附加任何额外条款或条件。