Jac*_*ser 2 memory performance lifetime rust
考虑到以下功能,您期望的性能差异是什么?
pub fn foo<'a>(data: Request) -> Response<'a> {
//
}
Run Code Online (Sandbox Code Playgroud)
与
pub fn foo(data: Request) -> Response<'static> {
//
}
Run Code Online (Sandbox Code Playgroud)
请问Response有一生'static保持每个Response在内存中的程序的生命?
'a在记忆中会持续多长时间'static?
这两个函数将生成相同的机器代码.在编译期间删除生命周期.如果您的程序签出,它们没有其他意义.
特别是,将生命时间视为"长期存在于记忆中"是错误的.一生都是关于"这足够长寿".这是一个微妙的区别,但要记住的关键是生命时间是描述性的,而不是规定性的.给予一生一世并不意味着它在一定时间内保持活力; 由于其他原因(例如可以引用全局变量'static),它是否存活了必要的持续时间,或者程序将无法编译.
其次,你的片段中的生命周期根本没有立竿见影的效果.它们只是Response结构的参数.由该结构决定如何处理生命周期.它是否在内部持有对此生命的引用?它只是转发到PhantomData用于将响应与某些连接相关联吗?
第三,给定定义函数的方式(使用仅在返回类型中使用的lifetime参数),对实现的要求没有区别.因为这里的生命周期是由调用者选择的,所以函数必须准备好以实现'static生命周期.所有这一切都使得调用者的使用更加烦人.
总结一下: