gpt4 book ai didi

c - 全局变量性能效果(c、c++)

转载 作者:太空狗 更新时间:2023-10-29 16:35:49 28 4
gpt4 key购买 nike

我目前正在开发一种非常快速的算法,其中一部分是非常快速的扫描器和统计功能。在这个任务中,我追求任何性能优势。因此,我也对保持代码的“多线程”友好感兴趣。

现在开始提问:我注意到将一些非常频繁访问的变量和数组放入“全局”或“静态本地”(作用相同),会带来可衡量的性能优势(在 +10% 的范围内)。我试图理解为什么,并找到解决方案,因为我宁愿避免使用这些类型的分配。请注意,我不认为差异来自“分配”,因为在堆栈上分配一些变量和小数组几乎是瞬时的。我相信区别来自“访问”和“修改”数据。

在这次搜索中,我发现了这篇来自 stackoverflow 的旧帖子: C++ performance of global variables

但我对那里的答案感到非常失望。很少解释,主要是提示“你不应该那样做”(嘿,这不是问题!)和非常粗略的陈述,比如“它不会影响性能”,这显然是不正确的,因为我正在精确地测量它基准测试工具。

如上所述,我正在寻找一个解释,如果存在的话,我正在寻找这个问题的解决方案。到目前为止,我感觉计算局部(动态)变量的内存地址比全局(或局部静态)变量花费更多。也许类似于 ADD 操作差异。但这无助于找到解决方案...

最佳答案

这实际上取决于您的编译器、平台和其他细节。但是,我可以描述一种全局变量更快的场景。

在许多情况下,全局变量处于固定偏移量。这允许生成的指令直接使用该地址。 (类似于 MOV AX,[MyVar]。)

但是,如果您有一个相对于当前堆栈指针或类或数组成员的变量,则需要一些数学运算来获取数组的地址并确定实际变量的地址。

显然,如果您需要在全局变量上放置某种互斥锁以保持其线程安全,那么您几乎肯定会失去任何性能增益。

关于c - 全局变量性能效果(c、c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210787/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com