找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1249|回复: 9
收起左侧

C语言顺序执行与for循环执行哪个更快?

[复制链接]
ID:997026 发表于 2023-9-21 22:21 | 显示全部楼层 |阅读模式

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

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

}
回复

使用道具 举报

ID:624769 发表于 2023-9-21 22:56 | 显示全部楼层
单纯考虑执行速度的话,
相同代码 打 4遍  肯定 比循环 4次 要快的多。
甚至,不要写子函数, 直接在 主程序里 输入代码 一定是最快的。
回复

使用道具 举报

ID:1093026 发表于 2023-9-21 23:58 | 显示全部楼层
以ARM精简指令集为例,执行速度取决于相同功能,编译后产生的汇编指令有多少条。如果顺序执行和for循环展开的代码逻辑一样,那么,执行效率应该是相当的。
个人觉得,考虑执行效率更应该是for循环嵌套的场景,此时,遍历次数多的应该放在内层循环,这样执行效率会高一些。另外,switch case语句和if else语句的执行效率也是经常讨论的场景,单层情况下效率相当,嵌套场景switch case语句效率高。
回复

使用道具 举报

ID:883242 发表于 2023-9-22 00:54 | 显示全部楼层
不优化的时候,当然是顺序执行快,但是for循环省空间,以空间换时间。

把优化等级开到最高,很大可能一样快,取决于你的优化方向,如果是size顺序执行很可能跟for循环一样小,如果是speed那么for很可能跟顺序一样快。
回复

使用道具 举报

ID:517951 发表于 2023-9-23 07:21 | 显示全部楼层
顺序执行少了条件判断,要快. 但实际上条件判断执行时间才几us时间. 根本觉察不出来. 还不如用for循环来做.
回复

使用道具 举报

ID:883242 发表于 2023-9-23 10:50 | 显示全部楼层
仔细看了下,原来get_score_flag1不是函数而是变量啊!

Keil C51比较特殊会假定用户都是不懂volatile这个关键字的制杖,但是对于其他标准一些的c编译器来说,只要get_score_flag1没有volatile属性,优化等级开到足够高,不管你是写4遍还是for4遍,结果只能有get_score_flag1=1;这一句话,一样快。
回复

使用道具 举报

ID:1059013 发表于 2023-9-23 12:30 | 显示全部楼层
一般看编译后汇编代码的行数,行数少更快,早期单片机速度慢需要考量代码量,现在单片机非常快不用考虑代码量,影响速度的主要是AD转换以及其他的等待时间。
回复

使用道具 举报

ID:1088185 发表于 2023-9-24 07:18 | 显示全部楼层
hero_71 发表于 2023-9-21 23:58
以ARM精简指令集为例,执行速度取决于相同功能,编译后产生的汇编指令有多少条。如果顺序执行和for循环展开 ...

你确定验证过你所说的?
回复

使用道具 举报

ID:1088185 发表于 2023-9-24 07:22 | 显示全部楼层
就速度而言,不管51还是ARM, 顺序都是最快, 楼上说一样还甚至说for循环更快的, 最后先验证再来说。
回复

使用道具 举报

ID:584195 发表于 2023-9-24 21:54 | 显示全部楼层
顺序执行要快一些,你看看汇编代码就知道了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表