如何在Rust中编译时动态和已知向量?

时间:2017-03-29 17:21:30

标签: rust

我对documentation for vectors in Rust中似乎有冲突的陈述感到困惑:

  

'vector'是一个动态或'可扩展'数组,实现为标准库类型Vec<T>

  

Vectors将其内容存储为堆上T的连续数组。这意味着它们必须能够在编译时知道T的大小(即,需要多少字节来存储T?)。在编译时无法知道某些东西的大小。对于这些,您必须存储指向该事物的指针:幸运的是,Box类型可以完美地用于此。

Rust向量是可动态增长的,但我不知道它如何适合在编译时必须知道它们的大小的语句。

已经有一段时间了,因为我使用的是低级语言,我必须考虑内存分配,所以我可能会遗漏一些明显的东西。

1 个答案:

答案 0 :(得分:9)

注意措辞:

  

他们必须能够知道T

的大小

这表示必须知道单个元素的大小。元素总数以及分配的内存总量尚不清楚。

当向量分配内存时,它表示“我想存储12个FooBar结构。一个FooBar是24个字节,因此我需要分配288个字节”。

12 是向量的动态容量, 24 是一个元素的静态大小(T)。