【发布时间】:2025-12-31 13:55:12
【问题描述】:
编辑:n 是一个常数。它不会在循环内改变。
鉴于两种情况:
1)
if (n % 2 == 0)
for(i = 1; i <= 10; i++)
...
else
for(i = 1; i <= 9; i++)
...
2)
for(i = 1; i <= 9 + (n % 2 == 0); i++)
...
这两种情况有时间上的差异吗? (案例2)验证n是否是偶数(或只是一个附加条件)的每一步应该运行程序有点慢,对吗?
【问题讨论】:
-
比较两者生成的汇编代码。并在测量时运行每个变体一百万次。并记住在比较或基准测试之前启用优化。
-
如果优化器可以确定 n 绝对不会改变,因此
(9 + (n % 2 == 0))是循环的常数,那么它可能是相同的。唯一知道的方法是检查 -
如果您想了解性能,您需要对其进行衡量。在当今具有推测执行、乱序执行、指令/数据预取等的现代 CPU 上,即使检查生成的代码也无济于事..
-
你可能会得到完全相同的程序集
-
如果这里有差异,那么差异将非常小,以至于很难以任何准确度进行测量。
标签: c++ for-loop if-statement time