使用 'static 与 'a 的性能差异是什么?

What are the performance differences of using 'static vs 'a?

考虑到以下功能,您预计会有哪些性能差异?

pub fn foo<'a>(data: Request) -> Response<'a> {
    //
}

对比

pub fn foo(data: Request) -> Response<'static> {
    //
}

生命周期为 'staticResponse 是否会在程序生命周期内将每个 Response 都保存在内存中?

'static 相比,'a 会在内存中保留多长时间?

这两个函数将生成相同的机器码。生命周期在编译期间被删除。如果您的程序签出,它们就没有进一步的意义。

特别是,将生命周期视为 "this is held in memory this long" 是错误的。生命周期都是关于 "this stays alive long enough"。这是一个微妙的区别,但要记住的关键是生命周期是 描述性的 ,而不是 规定性的 。给予某物一生的生命并不意味着它会存活一段时间。由于其他原因(例如,可以使用 'static 引用全局变量),或者程序无法编译。

其次,您的代码段中的生命周期根本不会立即生效。它们只是 Response 结构的参数。由该结构决定如何处理生命周期。它是否在内部持有对这一生的事物的引用?它是否只是转发到用于将响应与某些连接相关联的 PhantomData

第三,考虑到函数的定义方式(lifetime参数只在return类型中使用),对实现的要求没有区别。因为这里的生命周期是由 调用者选择的 ,函数必须准备好完成 'static 生命周期。所有这一切只会让调用者的使用更加烦人。

所以总结一下:

  • 生命周期不是这样的。
  • 第一个版本没有用。