gpt4 book ai didi

rust - 动态大小类型总是在堆上吗?

转载 作者:行者123 更新时间:2023-12-02 01:27:41 25 4
gpt4 key购买 nike

我对 Rust 的学习让我了解了动态大小类型 (DST),并且我知道这些类型的大小在编译时无法得知。例如。 str .

我现在的问题是,我说 DST 永远不会存在于堆栈上,它们只存在于堆上,这样说对吗?

另外,另一方面,说大小类型可以存在于堆栈中是否正确:

(eg. let x:u32 = 10)

但也可以存在于堆上,例如通过使用 Box

(eg let x: Box<u32> = Box::new(10))

以上这些说法正确吗?

最佳答案

无大小类型通常最好解释为“只是数据”。无论数据位于何处对于 DST 的定义都不重要。

例如,您可以让 dst 位于堆栈中:

let x = [1, 2, 3];
let y = &x[..];

数组x位于堆栈中,当您将其放在y中的引用下时,其数据被理解为dst。

y 的类型为 &[i32] —— 即对某些 i32 的引用。在这种情况下,引用指向堆栈上的数据。

您可以放置​​ DST 的其他值得注意的地方是:

  • 通过分配的堆(BoxRcArcVec 等)
  • 程序的只读部分(通常通过字符串常量,例如“abc”)。
  • 未知地点(通过夜间代码中的外部类型)。

本质上,任何类型都可以存在于堆栈和堆上(除非与生命周期相关的问题)。如果堆栈上有大小类型,请将其装箱并将其放在堆上。如果您想要堆栈上的切片,请切片为数组或字符串。如果您想要一个特征对象,请引用堆栈上的值等。

关于rust - 动态大小类型总是在堆上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74075767/

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