rust - 生锈不必要的内存副本?
问题描述
为了为具有生命周期切片的结构实现迭代器,我必须这样做
struct S<'a, T> {
inner: &'a mut [T],
}
impl<'a, T> Iterator for S<'a, T> {
type Item = &'a mut T;
fn next(&mut self) -> Option<Self::Item> {
let temp = std::mem::take(&mut self.inner);
let (first, rest) = temp.split_first_mut()?;
self.inner = rest;
Some(first)
}
}
在编写此代码时,我意识到生命周期会强制执行额外的内存复制(mem::take),这在 C 或 C++ 中是不必要的。我是否在这里遗漏了什么,或者这是生锈为终生付出的小代价?
解决方案
- LLVM 将优化不必要的副本。
mem::take<T>
要求T
impl
sDefault
所以不要将其视为通用解决方案。
推荐阅读
- ajax - Laravel 数据表 - 未定义函数的错误
- java - 在 Timer 类对象中使用 Main 方法中的 NULL Autowired 对象
- javascript - 在 firebase auth 和实时数据库中获得相同的 id
- javascript - 服务工作者获取的响应中未包含“Content-Length”标头
- angular - 角度优化:APP_INITIALIZER 如何从外部发出的 HTTP 请求中读取响应
- r - 如何使用 purrr 和管道顺序应用函数
- c# - Unity 激励视频广告
- tomcat - 无法实例化 Servlet
- javascript - 使事件发射器同步
- php - PHP Stripe ACH 验证银行账户