Vec
,以便创建一个非常便宜。减少了我的尝试样本:
MaybeUninit
this this汇编,但是代码根始终将内联阵列零零,打败了我想要的优化。例如,我期望SmallVec
函数仅通过编写单个字节来设置枚举判别。相反
use std::mem::MaybeUninit;
const N: usize = 24;
pub enum SmallVec<T> {
Inline([MaybeUninit<T>; N]),
Heap(*mut T)
}
impl<T> SmallVec<T> {
fn new() -> Self {
SmallVec::Inline([const { MaybeUninit::uninit() }; N])
}
fn clear(&mut self) {
*self = SmallVec::new();
}
}
rust游乐场链接
Godbolt链接我如何避免这种零,以实现所谓的性能优势?感谢您的任何帮助。
如果您避免使用非专业化值,则似乎您将获得预期的优化:
clear()
memset