堆栈(重新)创建时的性能差异

Performance difference at stack (re)creating?

本文关键字:性能 创建 重新 堆栈      更新时间:2023-10-16

之间是否存在性能差异?
int test;
void Update()
{
    test +=2;
}

和this:

void Update()
{
    int test;
    test +=2;
}

,

int main()
{
    while(true)
        Update();
}

我问,因为第二段代码更好读(你不需要在类头声明它),所以我会使用它,如果性能不低。

这两个代码片段之间不太可能存在性能差异,只有对代码进行分析才能可靠地分辨出来,但是这里有一个重要的功能差异,您应该在这里考虑。

如果test变量只在函数update()中需要,那么必须在函数中声明它。这样,变量在函数内部的作用域是有限的。这种局部变量的生存期被限制在它所在的范围内。在函数体内,直到右括号}

如果你想让你的test变量在函数调用中保持状态,那么它可以是一个在函数内部声明的局部静态变量。

在函数外部声明test使其成为全局变量。它可以在同一文件中的任何函数中访问。作为一个全局变量,它的生命周期一直延续到程序结束。

性能差异,不大可能。这很容易测试,但取决于您的编译器。检查输出组件并进行基准测试。如果有差别,也可能很小。

然而,有一个主要的功能差异。第二个例子实际上是无用的,因为test每重置一次Update。为了避免这种情况,您可以将其声明为static int test,但实际上您又编写了第一个示例。

所以,它们是非常不同的东西,但会有相似的性能。