标题: C语言顺序执行与for循环执行哪个更快? [打印本页]

作者: hxdby    时间: 2023-9-21 22:21
标题: C语言顺序执行与for循环执行哪个更快?

想问下,代码顺序执行,与for循环的方式执行,哪个更快些?
举例:

void  check_score()
{
      get_score_flag1=1;
      get_score_flag1=1;
get_score_flag1=1;
get_score_flag1=1;

}

作者: 188610329    时间: 2023-9-21 22:56
单纯考虑执行速度的话,
相同代码 打 4遍  肯定 比循环 4次 要快的多。
甚至,不要写子函数, 直接在 主程序里 输入代码 一定是最快的。

作者: hero_71    时间: 2023-9-21 23:58
以ARM精简指令集为例,执行速度取决于相同功能,编译后产生的汇编指令有多少条。如果顺序执行和for循环展开的代码逻辑一样,那么,执行效率应该是相当的。
个人觉得,考虑执行效率更应该是for循环嵌套的场景,此时,遍历次数多的应该放在内层循环,这样执行效率会高一些。另外,switch case语句和if else语句的执行效率也是经常讨论的场景,单层情况下效率相当,嵌套场景switch case语句效率高。
作者: Hephaestus    时间: 2023-9-22 00:54
不优化的时候,当然是顺序执行快,但是for循环省空间,以空间换时间。

把优化等级开到最高,很大可能一样快,取决于你的优化方向,如果是size顺序执行很可能跟for循环一样小,如果是speed那么for很可能跟顺序一样快。
作者: rayin    时间: 2023-9-23 07:21
顺序执行少了条件判断,要快. 但实际上条件判断执行时间才几us时间. 根本觉察不出来. 还不如用for循环来做.
作者: Hephaestus    时间: 2023-9-23 10:50
仔细看了下,原来get_score_flag1不是函数而是变量啊!

Keil C51比较特殊会假定用户都是不懂volatile这个关键字的制杖,但是对于其他标准一些的c编译器来说,只要get_score_flag1没有volatile属性,优化等级开到足够高,不管你是写4遍还是for4遍,结果只能有get_score_flag1=1;这一句话,一样快。
作者: fishafish    时间: 2023-9-23 12:30
一般看编译后汇编代码的行数,行数少更快,早期单片机速度慢需要考量代码量,现在单片机非常快不用考虑代码量,影响速度的主要是AD转换以及其他的等待时间。
作者: 1600277881    时间: 2023-9-24 07:18
hero_71 发表于 2023-9-21 23:58
以ARM精简指令集为例,执行速度取决于相同功能,编译后产生的汇编指令有多少条。如果顺序执行和for循环展开 ...

你确定验证过你所说的?

作者: 1600277881    时间: 2023-9-24 07:22
就速度而言,不管51还是ARM, 顺序都是最快, 楼上说一样还甚至说for循环更快的, 最后先验证再来说。
作者: zyluglugl    时间: 2023-9-24 21:54
顺序执行要快一些,你看看汇编代码就知道了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1