请澄清:我知道全球是多么邪恶,什么时候不使用它们:)
发布于 2010-05-19 16:18:51
这完全取决于您的机器架构。全局变量是通过一个已知地址访问的,而局部变量通常是通过地址寄存器的索引访问的。两者之间差异的可能性非常小,但是如果您认为这很重要,则应该为您的目标体系结构编写一个测试,并度量其差异。
发布于 2010-05-19 16:18:58
这要视情况而定,但通常是肯定的,尽管这是一个微观问题。全局变量应该可以从许多上下文中引用,这意味着将它们放入寄存器是不可能的。而在局部变量的情况下,这是可能的,也是可取的。实际上,范围越窄,编译器就越有机会优化访问/修改该变量。
发布于 2010-05-19 17:00:59
在许多情况下,局部变量可能“更快”,但我认为性能的提高不会显著或超过拥有许多全局变量的额外维护成本。我在下面列出的每一件事,要么都有可以忽略不计的成本,要么很容易与程序中的任何其他低效率相形见绌。我认为这是一个微观优化的完美例子。
局部变量在堆栈中,这更有可能在缓存中。如果您的全局变量经常被使用,这一点是没有意义的,因为它因此也将在缓存中。
局部变量的作用域是函数-因此,编译器可以假定它们不会被任何其他函数调用所更改。使用全局时,编译器可能被迫重新加载全局值。
在一些64位机器上,获取全局变量的地址是一个两步的过程,您还必须将全局的32位偏移量添加到64位基本地址中。局部变量始终可以从堆栈指针直接访问。
https://stackoverflow.com/questions/2867363
复制相似问题