【发布时间】:2010-10-03 20:44:58
【问题描述】:
我看到这个问题询问是否globals are bad。
当我考虑它的后果时,我能想到的唯一论点是它们在某些情况下是必要的,这可能是出于性能原因。
但是,我不太确定。所以我的问题是,使用全局会比使用 get/set 方法调用更快吗?
【问题讨论】:
标签: c++ c performance methods global
我看到这个问题询问是否globals are bad。
当我考虑它的后果时,我能想到的唯一论点是它们在某些情况下是必要的,这可能是出于性能原因。
但是,我不太确定。所以我的问题是,使用全局会比使用 get/set 方法调用更快吗?
【问题讨论】:
标签: c++ c performance methods global
一个好的现代编译器应该内联 get/set 方法调用,这样可能没有真正的区别。
在几乎任何情况下,担心静态/全局变量是否会导致您头疼比担心性能影响更重要,因为性能影响无论如何都几乎无法检测到。
【讨论】:
它可能会稍微快一点,但速度不会有很大的提高。不过,全局变量对所有事物都具有 getter 和 setter 函数确实可以减小应用程序的大小。这种类型的大小节省是否对您的应用程序有益与您的目标平台相关。例如,在开发嵌入式应用程序、内存有限的平台时,它可能是一个可行的解决方案。
【讨论】:
您可以通过用汇编程序编写来获得更多性能。而且还会浪费更多时间来调试代码。
这是完全相同的交易类型。
【讨论】:
更合适的比较是访问全局(静态)和本地。
确实,全局更快,因为访问局部需要将变量偏移量添加到堆栈指针的值。
然而,你永远,永远需要担心这个。尝试专注于重要的事情,例如使您的代码可读、可写和工作。
【讨论】:
这取决于 CPU 和编译器。在至少一个流行的 PPC 芯片组上,加载全局变量需要额外的指令,因为它不能以 16 位相对偏移量编码。
另外,它可能会在缓存局部性和/或破坏任何假设没有别名的优化。假设全局变量可以提高性能有点幼稚。
【讨论】: