如何在Rust中执行高效的向量初始化?

时间:2016-08-10 02:27:44

标签: arrays performance rust unsafe

在Rust中填写结构向量的好方法是:

  • 大小是动态的,但在初始化时已知。
  • 不首先将内存初始化为虚拟值。
  • 不会重新分配内存。
  • 在此示例中,向量的所有成员始终已初始化。
    (与Rusts保证没有未定义的行为一致)。

理想情况下

  • 不索引检查每个索引访问权限(因为在声明向量时可以知道大小是可能的)。
  • 不需要SSLContext
    (不确定这是否合理,但是编译器_could_检测到所有值都被填充,允许在不安全的块中使用此类逻辑)。

C等价物是:

unsafe

我正在移植一些C代码,它在一个简单的循环中填充一个数组,所以我想知道是否有一个 Rustic 方法来执行这样一个零或至少最小开销的常见任务?

如果此代码的Rust版本通常需要一些额外的检查,那么最近的等价物是什么?

1 个答案:

答案 0 :(得分:5)

只需使用mapcollect

struct MyStruct(usize);

fn create_mystructs(n: usize) -> Vec<MyStruct> {
    (0..n).map(MyStruct).collect()
}

“初始化”在安全Rust中没有意义,因为您需要能够访问未初始化的值,这是不安全的。收集到容器中时可以使用Iterator::size_hint方法,以确保进行最少量的分配。

基本上,我相信优化器会在这里做正确的事情。如果没有,我相信它最终会。