Memory leaks 如何将收藏中的物品放入rust

Memory leaks 如何将收藏中的物品放入rust,memory-leaks,rust,Memory Leaks,Rust,我有一个称为的小板条箱,它是专门为大型固定大小的堆阵列设计的(其中可以存储数十亿个元素)。但是,我在理解为这个数组实现Drop的正确方法时遇到了一个问题 pub结构数组{ 大小:usize, ptr:*mut T T, } 我原来的Drop如下所示: 数组的impl Drop{ fn下降(&mut自我){ 让objsize=std::mem::size_of::(); 让layout=layout::from_size_align(self.size*objsize,8).unwrap();

我有一个称为的小板条箱,它是专门为大型固定大小的堆阵列设计的(其中可以存储数十亿个元素)。但是,我在理解为这个数组实现
Drop
的正确方法时遇到了一个问题

pub结构数组{
大小:usize,
ptr:*mut T T,
}
我原来的
Drop
如下所示:

数组的impl Drop{
fn下降(&mut自我){
让objsize=std::mem::size_of::();
让layout=layout::from_size_align(self.size*objsize,8).unwrap();
不安全{
解除锁定(self.ptr as*mut u8,布局);
}
}
}
然而,这显然是不对的,因为如果T是一个
Drop
,那么我正在泄漏内存-一位友好的github成员向我指出了这一事实。但我该如何最好地释放这些记忆呢?我天真地认为我可以循环所有元素并调用它们:

0..中的i的
(自身大小为isize){
std::ptr::放置到位(self.ptr.wrapping_offset(i));
}

但是,如果阵列是十亿
u8
,这不是一个可怕的想法吗,因为那将是十亿次无操作?我想编译器应该足够聪明,可以进行死代码删除,所以我可能是过早优化的牺牲品。

将您的
drop\u放在一个if语句检查中。

哇-谢谢。我想我应该更彻底地阅读API!