如果里面什么都没有,循环会更快吗?
Are loops faster if there are nothing inside them?
这可能是个愚蠢的问题,显然如果函数内部没有任何内容,任何事情都会更快,因为它不需要处理任何东西。但是,我在弄乱 SFML 并决定尝试使用 for 循环来滞后我的程序(因为每个游戏循环都是 1 帧)。
我做了一个循环,每 1 帧计数到 50,000,000,老实说它仍然 运行 在 10 FPS。然而,第二次我放置了一个 std::cout << index << std::endl;
,程序不会完成一帧并且每 10 秒计数 1000。
有一个内部什么都没有的循环真的能让它更快吗?
如果你的循环体中没有任何内容并且只是像这样计算:
for (int i = 0; i < 50; ++i) {}
然后任何体面的优化器都会简单地删除整个循环,因此甚至不会执行计数。原因是没有副作用,所以去掉循环给出一个等价的程序。
即使您稍后要打印 i
计数器变量,大多数优化器仍然能够删除循环,因为他们知道 i
将在 50
之后循环。
因此,"empty" 可以优化的循环速度无限快。
这可能是个愚蠢的问题,显然如果函数内部没有任何内容,任何事情都会更快,因为它不需要处理任何东西。但是,我在弄乱 SFML 并决定尝试使用 for 循环来滞后我的程序(因为每个游戏循环都是 1 帧)。
我做了一个循环,每 1 帧计数到 50,000,000,老实说它仍然 运行 在 10 FPS。然而,第二次我放置了一个 std::cout << index << std::endl;
,程序不会完成一帧并且每 10 秒计数 1000。
有一个内部什么都没有的循环真的能让它更快吗?
如果你的循环体中没有任何内容并且只是像这样计算:
for (int i = 0; i < 50; ++i) {}
然后任何体面的优化器都会简单地删除整个循环,因此甚至不会执行计数。原因是没有副作用,所以去掉循环给出一个等价的程序。
即使您稍后要打印 i
计数器变量,大多数优化器仍然能够删除循环,因为他们知道 i
将在 50
之后循环。
因此,"empty" 可以优化的循环速度无限快。