首页 > 解决方案 > 如果里面没有任何东西,循环会更快吗?

问题描述

这可能是一个愚蠢的问题,如果函数内部没有任何内容,显然任何事情都会更快,因为它不需要处理任何东西。然而,我在玩 SFML 并决定尝试使用 for 循环来延迟我的程序(因为每个游戏循环都是 1 帧)。

我做了一个循环,每 1 帧计数为 50,000,000,老实说,它仍然以 10 FPS 运行。但是,在我放置 a 的第二秒std::cout << index << std::endl;,该程序将无法完成一帧,并且每 10 秒计数 1000 帧。

有一个里面什么都没有的循环真的让它快得多吗?

标签: c++sfml

解决方案


如果您的循环在其主体中没有任何内容并且只是计数:

for (int i = 0; i < 50; ++i) {}

然后任何体面的优化器都会简单地删除整个循环,因此甚至不会执行计数。原因是没有副作用,所以删除循环给出了一个等效的程序。

即使您i稍后打印计数器变量,大多数优化器仍然能够删除循环,因为他们知道i50在循环之后。

因此,可以优化的“空”循环无限快。


推荐阅读