澄清一下:我知道全局变量的危害以及何时不应使用它们 :)
- 在编译后的C++程序中,访问/设置全局变量与本地变量相比是否会有性能惩罚?
澄清一下:我知道全局变量的危害以及何时不应使用它们 :)
这完全取决于您的机器架构。全局变量通过单个已知地址访问,而局部变量通常通过索引地址寄存器进行访问。两者之间的差异显著的可能性非常小,但如果您认为这很重要,您应该为目标架构编写一个测试并测量差异。
这要看情况,但通常是可以的,尽管这是一个微小的问题。全局变量应该可以从许多上下文中引用,这意味着将它们放入寄存器中是不可能的。而在本地变量的情况下,这是可能且更可取的。事实上,范围越窄,编译器就有更多机会优化对该变量的访问/修改。
严格来说,不是的。
需要考虑以下几点: 全局变量会增加程序在内存中的静态大小。 如果访问变量需要同步,那么这将导致一些性能开销。
局部变量可以进行许多编译器优化,但是全局变量则不能。因此,在某些情况下,您可能会看到性能上的差异。不过,我怀疑您的全局变量是否在性能关键循环中被访问(如果是,则设计非常糟糕!),所以这可能不是一个问题。
int n = 9;
int main()
{
for (n = 0; n < 10; ++n)
printf("%d", n);
for (int r = 0; r < 10; ++r)
printf("%d", r);
return 0;
}
为了确保,我尝试使用类来做类似的事情,但没有看到任何区别。但是如果全局变量在不同的编译单元中,可能会有所改变。
你不需要担心任何性能惩罚。除了其他人所说的之外,你还应该考虑分页开销。局部实例变量是从对象结构中获取的,该结构很可能已经被分页到缓存内存中。另一方面,全局变量可能会导致不同模式的虚拟内存分页。
再次强调,这些性能问题真的不值得你考虑。