高级类型(types): 深入的了解新类型模式(newtype pattern)、类型别名(type aliases)、绝不类型(the never type)、动态大小类型(dynamically sized types)。 高级函数/闭包:函数指针(function pointer)和返回闭包(return closures)。 宏(macro): 一种定义代码的方法,这些方法会在编译的时候定义更多的代码(ways to de...
理解:DST(Dynamically Sized Type)。根据 Dynamically Sized Types 的说明:DST 是在编译期无法确定内存大小(但在运行期需要是可以确定大小的)。由于 DST 无法在编译期确定大小,因此: 无法在栈上进行分配。 一般的,DST 无法作为一个值类型嵌入到其他的结构体中。(一般的结构体是 Sized 类型的) DST 可以作为结构体...
这样的变量称之为dynamically sized type,后续会讲到string slice和trait object也属于这个范畴。 因而,通常我们使用一个reference来指向一个Slice切片,让我们看下例 当reference指向dynamically sized type时,Rust实际会使用到一个胖指针(fat pointer),其中包含: pointer (1 machine word):指向实际被切片的数据。 length...
然而,对于[i32],Rust没法在编译时明确这个变量需要多少内存,因而也没法在栈上分配内存,因而上例中的slice_1和slice_2实际上会编译失败。这样的变量称之为dynamically sized type,后续会讲到string slice和trait object也属于这个范畴。 因而,通常我们使用一个reference来指向一个Slice切片,让我们看下例 letslice_1: ...
然而,对于[i32],Rust没法在编译时明确这个变量需要多少内存,因而也没法在栈上分配内存,因而上例中的slice_1和slice_2实际上会编译失败。这样的变量称之为dynamically sized type,后续会讲到string slice和trait object也属于这个范畴。 因而,通常我们使用一个reference来指向一个Slice切片,让我们看下例 ...
非正常大小的类型 大多数的时候,我们期望类型在编译时能够有一个静态已知的非零大小,但这并不总是 Rust 的常态。 Dynamically Sized Types (DSTs) Rust 支持动态大小的类型(DST):这些类型没有静态(编译时)已知的大小或者布局。从表面上看这有点离谱:Rust
然而,对于[i32],Rust没法在编译时明确这个变量需要多少内存,因而也没法在栈上分配内存,因而上例中的slice_1和slice_2实际上会编译失败。这样的变量称之为dynamically sized type,后续会讲到string slice和trait object也属于这个范畴。 因而,通常我们使用一个reference来指向一个Slice切片,让我们看下例 ...
因为Rust 需要知道例如应该为特定类型的值分配多少空间这样的信息其类型系统的一个特定的角落可能令人迷惑:这就是 动态大小类型(dynamically sized types)的概念。这有时被称为 “DST” 或“unsized types”,这些类型允许我们处理只有在运行时才知道大小的类型。 让我们深入研究一个贯穿本书都在使用的动态大小类型的...
因为Rust 需要知道例如应该为特定类型的值分配多少空间这样的信息其类型系统的一个特定的角落可能令人迷惑:这就是动态大小类型(dynamically sized types)的概念。这有时被称为 “DST” 或“unsized types”,这些类型允许我们处理只有在运行时才知道大小的类型。
当reference指向dynamically sized type时,Rust实际会使用到一个胖指针(fat pointer),其中包含: pointer (1 machine word): 指向实际被切片的数据。 length (1 machine word): 切片长度,即有多少个T(本例中T为i32)。 我们可以看下上述例子的内存分布图。