考虑到以下功能,您预计会有哪些性能差异?
pub fn foo<'a>(data: Request) -> Response<'a> {
//
}
对比
pub fn foo(data: Request) -> Response<'static> {
//
}
具有 'static
生命周期的 Response
是否会在程序生命周期内将每个 Response
都保存在内存中?
与 'static
相比,'a
会在内存中保存多长时间?
最佳答案
这两个函数将生成相同的机器码。生命周期在编译期间被删除。如果您的程序 check out ,它们就没有进一步的意义。
特别是,将生命周期视为“这在内存中保存了这么久”是错误的。生命周期就是“这个活得足够长”。这是一个微妙的区别,但要记住的关键是生命周期是描述性的,而不是规定性的。给予某物一生的生命并不意味着它会存活一段时间。要么由于其他原因(例如,可以使用 'static
引用全局变量)它在必要的持续时间内处于事件状态,或者程序将无法编译。
其次,您的代码段中的生命周期根本不会立即生效。它们只是 Response
结构的参数。由该结构决定如何处理生命周期。它是否在内部持有对这一生的事物的引用?它是否只是转发到用于将响应与某个连接相关联的 PhantomData
?
第三,鉴于函数的定义方式(生命周期参数仅用于返回类型),对实现的要求没有区别。因为这里的生命周期是由调用者选择的,所以函数无论如何都必须准备好完成'static
生命周期。所有这一切只会让调用者的使用更加烦人。
总结一下:
- 生命周期不是这样的。
- 第一个版本没有用。
关于performance - 使用 'static vs ' a 有什么性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51797033/