C / C ++性能全局与获取/设置方法

时间:2009-01-27 20:45:10

标签: c++ c performance methods global

我看到这个问题询问是否globals are bad

当我想到它的后果时,我能提出的唯一论据是,在某些情况下它们是必要的可能是出于性能原因。

但是,我对此并不十分肯定。所以我的问题是,使用全局比使用get / set方法调用要快吗?

5 个答案:

答案 0 :(得分:10)

一个优秀的现代编译器应该内联get / set方法调用,以便可能没有真正的区别。

几乎在任何情况下,担心静态/全局变量是否会让你头疼而不是性能影响更为重要,无论如何这些影响几乎都无法察觉。

答案 1 :(得分:3)

通过使用汇编语言编写,您可以获得更多性能。并且在调试代码时也会浪费更多时间。

这是完全相同的交易类型。

答案 2 :(得分:3)

更合适的比较是访问全局(静态)和本地。

实际上全局更快,因为访问本地需要将变量offset添加到堆栈指针的值。

然而,你永远不会,永远需要担心这一点。尝试专注于重要的事情,例如使代码可读,可写和正常工作。

答案 3 :(得分:1)

它可能稍微快一些,但速度并没有大幅增加。对于所有内容具有getter和setter函数的Globals确实会降低应用程序的大小。这种尺寸节省是否有利于您的应用程序与您所针对的平台相关。例如,在开发嵌入式应用程序,内存有限的平台时,它可能是一个可行的解决方案。

答案 4 :(得分:1)

这取决于CPU和编译器。在至少一个流行的PPC芯片组中,加载全局变量需要额外的指令,因为它不能以16位相对偏移进行编码。

另外,它可能会占用缓存局部性和/或破坏任何假设没有别名的优化。假设全局变量可以提高性能有点天真。