use*_*300 1 slice dynamic-memory-allocation rust
我看到回复告诉你使用Vec::with_capacity(some_size);,但感觉很奇怪。
为什么需要使用 Vector 来获取切片?我不想稍后增加切片,我只想使用普通切片,但大小在运行时是已知的,因为它来自某些程序输入。
我当前的解决方案是:
let mutable_zeroed_slice: &mut [u8] = &mut vec![0; size][..];
Run Code Online (Sandbox Code Playgroud)
有没有更好、更惯用且不费解的?
更新:您不能在包装在函数中之前使用该技巧,因为返回时您将丢失切片引用。
更新2:正如第一个回复中所指出的,Vec::with_capacity(size)[..]将为您提供一个具有给定容量的不可变空切片,这不是很有用。
您不需要可增长的属性,但仍然需要分配存储空间。
&[u8]指的是分配在某处的一些数据;您Vec尝试在此处创建的内容将在函数末尾消失,然后引用其内容的任何切片都将悬空,而 Rust 会阻止您这样做。
这个想法是使用装箱切片:它被装箱以便分配存储,但它不可增长(就像向量一样)。实现此目的的一个简单方法是构建一个向量,然后窃取其内容。
fn new_byte_slice(size: usize) -> Box<[u8]> {
vec![0; size].into_boxed_slice()
}
fn main() {
let values = new_byte_slice(10);
println!("{:?}", values);
}
/*
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
*/
Run Code Online (Sandbox Code Playgroud)