我对 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
存在于堆栈中,当您将其放在引用下时,其数据被理解为 dsty
.
y
有类型&[i32]
——也就是说,引用了一些i32
s。在这种情况下,引用指向堆栈上的数据。
您可以放置 DST 的其他值得注意的地方是:
- 通过分配的堆(
Box
, Rc
, Arc
, Vec
, etc.)
- 程序的只读部分(通常通过字符串常量,例如
"abc"
).
- 未知地点(通过
extern type
s 在夜间代码中)。
本质上,任何类型都可以存在于堆栈和堆上(除非与生命周期相关的问题)。如果堆栈上有大小类型,请将其装箱并将其放在堆上。如果您想要堆栈上的切片,请切片为数组或字符串。如果您想要一个特征对象,请引用堆栈上的值等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)