首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局变量的C++性能

全局变量的C++性能
EN

Stack Overflow用户
提问于 2010-05-19 16:14:38
回答 8查看 5.2K关注 0票数 15

请澄清:我知道全球是多么邪恶,什么时候不使用它们:)

  • 在访问/设置已编译的C++程序中的全局变量和本地变量时是否存在性能损失?
EN

回答 8

Stack Overflow用户

发布于 2010-05-19 16:18:51

这完全取决于您的机器架构。全局变量是通过一个已知地址访问的,而局部变量通常是通过地址寄存器的索引访问的。两者之间差异的可能性非常小,但是如果您认为这很重要,则应该为您的目标体系结构编写一个测试,并度量其差异。

票数 21
EN

Stack Overflow用户

发布于 2010-05-19 16:18:58

这要视情况而定,但通常是肯定的,尽管这是一个微观问题。全局变量应该可以从许多上下文中引用,这意味着将它们放入寄存器是不可能的。而在局部变量的情况下,这是可能的,也是可取的。实际上,范围越窄,编译器就越有机会优化访问/修改该变量。

票数 10
EN

Stack Overflow用户

发布于 2010-05-19 17:00:59

在许多情况下,局部变量可能“更快”,但我认为性能的提高不会显著或超过拥有许多全局变量的额外维护成本。我在下面列出的每一件事,要么都有可以忽略不计的成本,要么很容易与程序中的任何其他低效率相形见绌。我认为这是一个微观优化的完美例子。

局部变量在堆栈中,这更有可能在缓存中。如果您的全局变量经常被使用,这一点是没有意义的,因为它因此也将在缓存中。

局部变量的作用域是函数-因此,编译器可以假定它们不会被任何其他函数调用所更改。使用全局时,编译器可能被迫重新加载全局值。

在一些64位机器上,获取全局变量的地址是一个两步的过程,您还必须将全局的32位偏移量添加到64位基本地址中。局部变量始终可以从堆栈指针直接访问。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2867363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档