使用“静态”与“ a”有什么性能差异?

时间:2018-08-11 06:17:03

标签: performance memory rust lifetime

考虑以下功能,您会期望哪些性能差异?

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

vs。

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

生命周期为Response的{​​{1}}会在程序生命周期内将每个'static保留在内存中吗?

Response'a相比会保留多长时间?

1 个答案:

答案 0 :(得分:8)

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

尤其是,将生命周期视为“它在内存中保存了这么长时间”是错误的。终生都与“这种生命持续足够长的时间”有关。这是一个微妙的区别,但是要记住的关键是生命周期是描述性的,而不是描述性的。赋予生命一生并不意味着它可以存活一段时间。要么由于其他原因(例如,可以用'static引用全局变量)在必要的时间内存活,要么该程序无法编译。

第二,您的摘要中的生存期根本没有立即生效。它们只是Response结构的参数。由该结构决定如何处理生命周期。它是否在内部保留对此生命的引用?它只是转发到用于将响应与某个连接相关联的PhantomData吗?

第三,给定定义函数的方式(仅将生命周期参数用于返回类型),实现的要求没有差异。由于此处的生存期是由调用方选择的,因此无论如何,该函数必须准备满足'static的生存期。所有这些所做的就是使调用者的使用更加烦人。

总而言之:

  • 一辈子都不会这样。
  • 第一个版本没有用。