我正在优化一个稍微大一点的函数(大约 80 行没有注释的代码)。
作为尝试让分析器为我完成工作的一部分,我取了 2 block 代码并将它们放在单独的函数中(这应该只是暂时的,直到我可以将它们放回原处)。
有趣的部分是:
我的测试用例耗时 29.8 秒
在我将第一个 block 放入一个单独的函数后,我发现由于函数调用开销而导致的性能损失很小。 (30.2 秒)
当我将第二段代码放入一个单独的函数中时,我获得了相当大的性能提升,降至 24.2 秒
第二段代码是插入一个相当大的链表,我打算用二叉树或其他东西替换它,但是这 20% 的改进仍然让我很困惑。
tl;dr:尝试优化代码并注意到将代码块放入单独的函数中使我的性能提高了 20%。这怎么可能?
编辑:确认也在发布版本中运行
最佳答案
通过提取此代码块,您使函数更简单。也许这有助于编译器有效地编译函数。它可能减轻了注册压力,因为局部变量较少。
有时,这只是巧合。 随机晃动代码很可能会改变性能(两种方式)。 也许你只是碰巧取得了进步而不是恶化。
为什么“摇晃”会改变性能? 它可能会改变地址对齐、分支预测、编译器对什么是热什么是冷的看法、CPU 指令缓存的使用。
从语义的角度来看,所有这些都是实现细节。然而,它们会影响性能。它们是非常不可预测的,因为它们在非常低的级别上工作并且非常复杂。
关于performance - 将代码放在单独的函数中怎么可能提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373908/