into_boxed_slice() 方法有什么用?
What is the use of into_boxed_slice() methods?
查看可用于 Vec<T>
的方法我偶然发现了
into_boxed_slice(self) -> Box<[T]>
String
也有这样的方法(into_boxed_str(self)
)。将 Deref
用于 Vec<T>
/String
的用处是显而易见的,它允许将它们视为共享切片 (&[T]
),但我看不到任何用途拥有的切片 (Box<[T]>
),也许 FFI 除外。 Rust GitHub repo 仅在少数情况下使用 into_boxed_slice()
。
由于 std
中提供了创建盒装切片的方法,并且此容器列在其主页上,我想我可能遗漏了一些有用的东西。在什么情况下我应该使用拥有的切片来支持 Vec<T>
或 String
?
使用 into_boxed_slice()
的一个重要原因是盒装切片占用 仅 与以下内存一样多的内存:
- 底层数据本身
- 给出数据总长度的
length
字段
当使用标准 Vec
时,Vec
可以获得比实际需要更多的内存,以避免每次新元素分配时分配更多内存添加。 space 基本上没有使用。您可以通过比较 Vec::len()
与 Vec::capacity()
.
来了解使用了多少额外内存
我发现 into_boxed_slice()
函数有用的主要地方是内存中的文件缓存。为简单起见,我使用 Vec
将文件加载到内存中,但加载文件后,我不再需要添加或删除元素。所以我使用 into_boxed_slice()
将其转换为盒装切片。会有其他方法可以实现同样的事情,但在这种情况下,单个函数调用更容易。我喜欢盒装切片类型(而不是 Vec
),因为它清楚地表明缓存文件不打算修改的意图。
注意:您实际上仍然可以通过调用 Vec::shrink_to_fit()
使用 Vec
而无需额外开销,这将从 Vec
.
中删除额外分配的元素
我有一个应用程序,其中有数万个元素的 Vec
,每个元素都可以是 Vec
或 Box<[T]>
,所以我节省了数十万使用 into_boxed_slice
.
字节
查看可用于 Vec<T>
的方法我偶然发现了
into_boxed_slice(self) -> Box<[T]>
String
也有这样的方法(into_boxed_str(self)
)。将 Deref
用于 Vec<T>
/String
的用处是显而易见的,它允许将它们视为共享切片 (&[T]
),但我看不到任何用途拥有的切片 (Box<[T]>
),也许 FFI 除外。 Rust GitHub repo 仅在少数情况下使用 into_boxed_slice()
。
由于 std
中提供了创建盒装切片的方法,并且此容器列在其主页上,我想我可能遗漏了一些有用的东西。在什么情况下我应该使用拥有的切片来支持 Vec<T>
或 String
?
使用 into_boxed_slice()
的一个重要原因是盒装切片占用 仅 与以下内存一样多的内存:
- 底层数据本身
- 给出数据总长度的
length
字段
当使用标准 Vec
时,Vec
可以获得比实际需要更多的内存,以避免每次新元素分配时分配更多内存添加。 space 基本上没有使用。您可以通过比较 Vec::len()
与 Vec::capacity()
.
我发现 into_boxed_slice()
函数有用的主要地方是内存中的文件缓存。为简单起见,我使用 Vec
将文件加载到内存中,但加载文件后,我不再需要添加或删除元素。所以我使用 into_boxed_slice()
将其转换为盒装切片。会有其他方法可以实现同样的事情,但在这种情况下,单个函数调用更容易。我喜欢盒装切片类型(而不是 Vec
),因为它清楚地表明缓存文件不打算修改的意图。
注意:您实际上仍然可以通过调用 Vec::shrink_to_fit()
使用 Vec
而无需额外开销,这将从 Vec
.
我有一个应用程序,其中有数万个元素的 Vec
,每个元素都可以是 Vec
或 Box<[T]>
,所以我节省了数十万使用 into_boxed_slice
.