gpt4 book ai didi

rust - Rust:使用最少的新内存分配创建包含现有矢量元素的新矢量

转载 作者:行者123 更新时间:2023-12-03 11:37:00 25 4
gpt4 key购买 nike

我开始学习Rust,这是我第一次使用必须考虑内存分配的语言工作(我从未使用过C)。
作为练习,我决定看看如何创建一个新矢量,其中除了一些新元素外,还包括另一个矢量中的某些元素。我的目标是创建一个向量,该向量维护指向另一个向量中数据的指针,而不是复制或克隆该数据,以便仅将新内存分配给其他元素。这是下面代码中正在发生的事情,和/或是否有更好的方法来完成我要尝试的操作?

fn main() {
let v = vec![vec![1], vec![2], vec![3]];
let v0 = &v[0];
let v1 = &v[1];
let v2 = &vec![4];
let v3 = vec![v0, v1, v2];
}
我之所以使用嵌套向量,是因为对我来说,当您在堆上使用数据而不是在堆栈上处理此问题时,这个问题更有意义,向量是在堆栈上分配的,而整数在堆栈上,但是请记住,整个领域的新手,请随时让我知道我在说什么和做什么根本没有道理🙂。

最佳答案

My goal is to create a vector that maintains pointers to the data in the other vector rather than copying or cloning that data, so that new memory is only allocated for the additional elements. Is that what's happening in the code below[?]


是的, v3包含对 v中现有矢量的引用。它不会创建新的东西或任何东西。

this issue is more pertinent when you're working with data on the heap than on the stack, and vectors are allocated on the heap while integers are on the stack


尽管使用非复制类型确实可以避免在处理此类问题时自欺欺人,但这并不是真的。 Rust决定值是在堆栈上,在堆上还是不在堆上。如果我们要猜测Rust会做什么,那么 vec![vec![1]]vec![1]的值在堆中的最外层vec内将一样多。

关于rust - Rust:使用最少的新内存分配创建包含现有矢量元素的新矢量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63862828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com