忽略样式偏好,拥有一个强大的循环与许多轻量级循环相比有什么优势吗?

Ignoring style preferences, is there any advantage to having one beefy loop vs many lightweight loops?

例如,以下在任何语言中是否存在实用1性能差异:

for i=1 to 10:
    print i
for i=1 to 10:
    print i
for i=1 to 10:
    print i
for i=1 to 10:
    print i
for i=1 to 10:
    print i

对比

for i=1 to (10 * 5):
    print i%10

显然,任务通常不会那么琐碎,但重点仍然存在。如果您必须遍历一个数据集,与重复循环遍历该数据集相比,一次性对数据执行所有操作有什么优势吗?

1:我知道重复重新分配 space 可能会产生相关费用。但是,如果与任何现实生活任务相比时间微不足道,那么我们暂时忽略它。

简短的回答是这取决于

  • 根据实际执行的任务,一种方法可能会比另一种方法提高可读性。这是一个影响正确性和可维护性的实际问题。 这应该是您最关心的问题。

  • 将大循环分解成较小的循环可能会提高缓存效率。但是现在的缓存大小相当大。

  • 将大循环分解成更小的循环可能会产生更简单的表达式,如您的示例所示,或者更少的测试。您可能会看到 for multiple loop 情况下的改进,但如此之小不应成为令人信服的理由。

  • 将小循环组合成一个更大的循环可能会产生更少的比较和跳转,就像您的示例中的情况一样,以获得微小的改进。但对于您的示例,完全展开小循环可能更加有利。

与往常一样,对于性能调整,您必须执行基准测试并比较实际数据的时间。除非你看到很大的改进,否则选择最简单、最易读和可维护的解决方案。请注意,最优性是暂时的情况,环境、技术、数据量和特性的任何变化都可能影响任何解决方案的性能。