我目前正在开发一个非常快的算法,其中一部分是极快的扫描器和统计功能。
在这个过程中,我追求任何性能上的优势,并且对保持代码的“多线程友好”也很感兴趣。
现在有一个问题:
我注意到将一些非常频繁访问的变量和数组放入“全局变量”或“静态局部变量”(它们做的事情相同)中可以获得可衡量的性能提升(在+10%范围内)。
我正试图理解其中的原因,并找到一个解决方案,因为我更希望避免使用这些类型的分配。
请注意,我不认为差异来自“分配”,因为在堆栈上分配几个变量和小型数组几乎是瞬时的。我相信差异来自于“访问”和“修改”数据。
在这个搜索过程中,我找到了 stackoverflow 上的这篇旧帖子:
C++ performance of global variables
但我对那里的答案非常失望。很少有解释,大多数都是关于“你不应该这样做”的抱怨(嘿,那不是问题!),而且非常粗略的陈述,比如“它不会影响性能”,这显然是不正确的,因为我正在使用精确的基准测试工具来测量它。
如上所述,我正在寻找一个解释,并且,如果有的话,解决这个问题的方法。到目前为止,我觉得计算本地(动态)变量的内存地址的代价比全局变量(或局部静态变量)要高一些。也许像 ADD 操作差异之类的东西。但这并不能帮助找到一个解决方案......