#切片 #大小 #指针 #存储 #内容 # #

thin-boxed-slice

ThinBoxedSlice 在切片内容之前存储切片的大小,因此 size_of::<ThinBoxedSlice> 仅是指针的大小

7 个版本

0.2.5 2024 年 4 月 29 日
0.2.4 2024 年 4 月 29 日
0.1.1 2024 年 4 月 29 日

#1894 in Rust 模式

Download history 428/week @ 2024-04-28 15/week @ 2024-05-05 74/week @ 2024-06-30 65/week @ 2024-07-28

每月 65 次下载

MPL-2.0 许可证

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