7 个版本
0.2.5 | 2024 年 4 月 29 日 |
---|---|
0.2.4 | 2024 年 4 月 29 日 |
0.1.1 | 2024 年 4 月 29 日 |
#1894 in Rust 模式
每月 65 次下载
8KB
116 代码行
thin-boxed-slice
ThinBoxedSlice
存储切片的大小在其内容之前,因此 size_of::<ThinBoxedSlice>
仅是指针的大小。
我主要将其用作哈希表的关键字,因此 ThinBoxedSlice
没有实现 Box
的所有特质。如果您需要一些额外的特质,您可能需要创建一个问题或 PR。
类似的项目
thin-vec
thin-slice
请注意,如果切片长度较大,thin-slice
会将切片的胖指针存储到新的堆内存中。
lib.rs
:
ThinBoxedSlice
在切片内容之前存储切片的大小,因此 size_of::<ThinBoxedSlice>
仅是指针的大小
use core::mem::size_of;
use thin_boxed_slice::ThinBoxedSlice;
assert_eq!(size_of::<ThinBoxedSlice<u8>>(), size_of::<*mut u8>());
示例
use thin_boxed_slice::ThinBoxedSlice;
use core::ops::Deref;
let data = &[1, 2, 3];
let result = ThinBoxedSlice::<i32>::from(data);
assert_eq!(result.len(), 3);
assert_eq!(result.deref(), data);
ThinBoxedSlice
极其有用作为哈希表的关键字,因为哈希表通常分配比元素更多的槽位以减少哈希冲突,而使用 ThinBoxedSlice
减少关键字的大小可以减少额外分配的槽位的内存消耗。示例
use thin_boxed_slice::ThinBoxedSlice;
use std::collections::HashSet;
use std::ops::Deref;
let mut s: HashSet<ThinBoxedSlice<u8>> = HashSet::new();
s.insert(ThinBoxedSlice::from("123".as_bytes()));
s.insert(ThinBoxedSlice::from("456".as_bytes()));
assert_eq!(s.get("123".as_bytes()).unwrap().deref(), "123".as_bytes());
依赖关系
~260KB