繁体   English   中英

C++ 局部变量,性能

[英]C++ local variables, performance

我只是想知道当 function scope 中的变量始终相同且不更改时会发生什么,例如

void test()
{
    int x = 10;
}

我知道编译器存储有关其名称、大小等的信息,但在这种情况下,它是否也会缓存其值?

我的想法是,如果那是每秒使用 60 或 140 次的成员 function。 它会对性能产生什么影响,是否应该将其作为成员变量移动以提高性能?

除了调试符号:不,编译器通常不存储局部变量的名称。

与在没有这些变量的情况下实现相同的目标相比,局部自动变量很少有开销。 要验证您的程序是否属于这种情况,您可以测量。

在示例 function 的情况下,它可能被优化为空操作,并且不会留下任何局部变量的痕迹。

成员变量通常不能被优化掉,因此添加那些不必要的变量很容易影响性能。 效果是否显着,可以通过测量发现。

就像评论中提到的那样,如果您检查为此类代码生成的程序集,您会看到该变量被优化掉了(甚至在任何意义上都不存在)。

如果你有一个 function 像:

int test()
{
    int x = 10;
    return x;
}

也不会创建变量,但编译器只会让您的 function 返回 10。

至于关于性能的要点,除非你已经有一个可衡量的性能问题,否则我根本不会担心你的常量存储在“哪里”。

您将很难衡量任何性能影响。

有用的研究链接包括:

https://godbolt.org/来尝试你的代码并查看生成的程序集(记得设置编译器标志)

这个关于用代码衡量性能的优秀答案: https://stackoverflow.com/a/60293070/567070

优化的程度取决于您的编译设置。 godbolt.org 允许您编译代码并查看编译后的 output。在此示例中,gcc9.2 根据优化标志以不同方式编译您的代码。

没有优化:

https://godbolt.org/z/Ej6ado

局部变量压入堆栈,然后立即从堆栈中弹出。

使用 -O1 的最低可能优化:

https://godbolt.org/z/dnesvs

代码中提及的变量已完全优化掉,因为它未被使用:function 不执行任何操作并立即返回。

使变量成为成员变量可能是有害的,因为理论上允许它在 function 调用之间甚至在 function 执行期间发生变化。如果它是常量变量,只需在函数中将其声明为“const”不用担心优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM