克隆固定大小数组的最有效方法是什么?

w.b*_*ian 3 rust

我有一个结构,它由一个具有 65536 个元素的固定大小的字节数组组成。

Clone天真地在我的结构上实现了 - 我创建了一个新数组并循环遍历原始数组,一次一个复制每个元素。有没有更有效或惯用的方法来做到这一点,基本上可以归结为 a memcpy

Fra*_*gné 6

从 Rust 1.21 开始

Clone始终实现的项目数组Clone,因此您可以简单地调用.clone()数组或#[derive(Clone)]结构。

在 Rust 1.21 之前

从 Rust 1.12 开始,数组Clone最多只能实现32 个项目。但是,数组可以实现Copy任意数量的项目(尽管Copy需要Clone!)。因此,我们可以在我们的实现中制作数组的隐式副本Clone

struct Foo {
    b: [u8; 65536],
}

impl Clone for Foo {
    fn clone(&self) -> Self {
        Foo {
            b: self.b
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您还希望您的结构实现Copy,那么您也可以Clone::clone通过复制以下内容来实现self

#[derive(Copy)]
struct Foo {
    b: [u8; 65536],
}

impl Clone for Foo {
    fn clone(&self) -> Self {
        *self
    }
}
Run Code Online (Sandbox Code Playgroud)