tl;dr将字节切片复制到本地字节数组(其大小可能与切片大小相同或不同)的最快方法是什么?
给定从函数返回的一些切片作为slice_: &[u8]. 我想将最大数量的切片数据复制到已知大小的本地数组buffer: [u8; 1024] = [0; 1024]. 换句话说,尽可能多地复制 fromslice_到buffer。可以slice_是任意长度。
fn main() {
let slice_: &[u8] = get_slice();
let mut buffer: [u8; 1024] = [0; 1024];
// copy slice_ to buffer ...
}
Run Code Online (Sandbox Code Playgroud)
复制切片最快的方法是什么?复制切片最惯用的方法是什么?
我知道功能copy_from_slice。然而,这需要
的长度
src必须与 相同self。
我可以迭代,slice_但这看起来很笨拙。我猜想还有一种更优雅的“质朴”方式。
这段代码:
\npub fn kopimi(buffer: &mut [u8; 1024], slice: &[u8]) {\n let n = std::cmp::min(buffer.len(), slice.len());\n buffer[0..n].copy_from_slice(&slice[0..n]);\n}\nRun Code Online (Sandbox Code Playgroud)\n优化汇编为四个指令:比较、立即加载、条件移动和尾部调用memcpy:
example::kopimi:\n cmp rdx, 1024\n mov eax, 1024\n cmovae rdx, rax\n jmp qword ptr [rip + memcpy@GOTPCREL]\nRun Code Online (Sandbox Code Playgroud)\n我不认为\xe2\x80\x99 可以得到比这更高的效率。
\n| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |