c++ - 如果里面没有任何东西,循环会更快吗?
问题描述
这可能是一个愚蠢的问题,如果函数内部没有任何内容,显然任何事情都会更快,因为它不需要处理任何东西。然而,我在玩 SFML 并决定尝试使用 for 循环来延迟我的程序(因为每个游戏循环都是 1 帧)。
我做了一个循环,每 1 帧计数为 50,000,000,老实说,它仍然以 10 FPS 运行。但是,在我放置 a 的第二秒std::cout << index << std::endl;
,该程序将无法完成一帧,并且每 10 秒计数 1000 帧。
有一个里面什么都没有的循环真的让它快得多吗?
解决方案
如果您的循环在其主体中没有任何内容并且只是计数:
for (int i = 0; i < 50; ++i) {}
然后任何体面的优化器都会简单地删除整个循环,因此甚至不会执行计数。原因是没有副作用,所以删除循环给出了一个等效的程序。
即使您i
稍后打印计数器变量,大多数优化器仍然能够删除循环,因为他们知道i
将50
在循环之后。
因此,可以优化的“空”循环无限快。
推荐阅读
- python - 使用 PyAudio 流式传输网络广播
- phonegap - Android 9 Pie 上的 phonegap 应用没有网络连接
- javascript - 如何修复 jquery/javascript 值未在 html 中第二次显示
- java - 用于 javascript 事件处理程序的主机对象
- ios - IGListKit - 加载更多时崩溃,网络调用后,更新现有数组
- javascript - 删除一个子类并一次添加另一个类
- azure - 当帐户名称包含破折号时,ARM Tempate 无法导出密钥
- java - 是否可以将代码存储在可以从另一个对象运行的对象中?
- string - 榆树 0.19 Maybe.withDefault
- bash - 使用 sed 将文件中的一行替换为来自标准输入或 HEREDOC 的多行