我有一堆代码来查找原始操作。问题是网络上没有太多关于这个主题的详细资源。在这个循环中:
for i:=0 to n do
print test
end
我们真的有多少步?在我的第一次猜测中,我会说n + 1,考虑到n代表循环,1代表打印。然后我想,也许我不够精确。即使在每个循环中为i添加1也没有操作? 在那个问题上我们有n + n + 1 = 2n + 1。这是对的吗?
答案 0 :(得分:4)
通过将循环重新转换为while
,循环可以分解为“原始操作”:
int i = 0;
while (i < n)
{
print test;
i = i + 1;
}
或者,更明确地说:
loop:
if (i < n) goto done
print test
i = i + 1
goto loop
done:
然后,您可以看到每次迭代都有比较,增量和goto
。这只是循环开销。你必须添加到循环中完成的任何工作。如果print
被视为“原始操作”,那么您有:
print
goto
条指令(一条完成时分离出循环)现在,如何将所有内容转换为机器代码在很大程度上取决于编译器,运行时库,操作系统和目标硬件。也许还有其他事情。