【发布时间】:2020-10-09 13:28:26
【问题描述】:
我只是想知道当函数范围内的变量总是相同并且不改变时会发生什么,例如
void test()
{
int x = 10;
}
我知道编译器会存储有关其名称、大小等的信息,但在这种情况下,它还会缓存其值吗?
我的想法是,如果这是一个每秒使用 60 或 140 次的成员函数。它会对性能产生什么影响,是否应该将其作为成员变量移动以提高性能?
【问题讨论】:
-
在示例中显示的变量将被优化。所以你需要测试和基准测试。但在大多数情况下,甚至在考虑微基准测试之前都倾向于使用可读代码。
-
别担心这个。使变量尽可能靠近需要它们的位置。运行代码后,在启用优化的情况下重新编译它,然后对其进行分析以查看其性能。获得这些数据后,您就可以开始着手手动调整代码了。
-
使其成为会员很可能会降低性能。原始类型的局部变量非常便宜,而且通常根本不需要任何成本。
-
实际上我已经有了代码,它在 QT 中,我绘制了一个“更复杂”的小部件,其中包含一些 30-140hz 的局部变量,并考虑是否值得将其重构为成员变量。现在一切都很好,没有任何滞后,但我有这样的想法,比如“还好吗?”
-
如果一个变量不会(不应该)改变,养成使用
const(即const int x = 10;)的习惯。它不仅可以帮助您发现错误,还可以帮助编译器找出优化。
标签: c++ compiler-construction performance-testing local-variables