[应用方案] 用汇编看一下无限循环写法区别

[复制链接]
1434|10
 楼主| LOVEEVER 发表于 2024-5-23 20:32 | 显示全部楼层 |阅读模式


在编程中,我们常常需要用到无限循环,常用的两种方法是`while (1)`和`for (;;)`。这两种方法效果完全一样,但哪一种更好呢?让我们看看它们编译后的代码。

编译前:

  1. while (1);

编译后:

  1. mov eax,1
  2. test eax,eax
  3. je foo+23h
  4. jmp foo+18h

编译前:

  1. for (;;);

编译后:

  1. jmp foo+23h

显然,`for (;;)`指令少,不占用寄存器,而且没有判断、跳转,比`while (1)`好。

星星点点didi 发表于 2024-7-11 13:09 | 显示全部楼层
现在很多都不会写汇编喽
gongqijuns 发表于 2024-7-11 14:15 | 显示全部楼层
其实也不用纠结这点资源和速度,现在芯片的主频不是再早的了
miltk 发表于 2024-7-11 15:19 | 显示全部楼层
一般来说,好像是for(;;)用的比较好吧
yuliangren 发表于 2024-7-11 16:22 | 显示全部楼层
这个我也注意过,好像就用操作系统的话,用for(;;)比较多
hight1light 发表于 2024-7-11 17:25 | 显示全部楼层
在C和C++编程语言中,while (1)和for (;;)都是用来创建无限循环的常见方法。这两种方法在功能上是完全等价的,因为它们都会导致循环无限执行,直到遇到显式的break语句或其他退出机制
nuan11nuan 发表于 2024-7-11 18:27 | 显示全部楼层
while (1):这种写法直接明了,表明循环条件是恒为真,因此会无限循环。for (;;):这种写法在形式上更为传统,因为它遵循了for循环的标准结构,但循环条件部分为空,这可能会让不熟悉这种用法的程序员感到困惑
eleg34ance 发表于 2024-7-11 20:30 | 显示全部楼层
有些开发者或团队可能更倾向于使用while (1),因为它更直观地表达了无限循环的意图。另一些开发者或团队可能更喜欢for (;;),因为它遵循了for循环的结构,即使在这种特殊情况下循环条件为空
suiziq 发表于 2024-7-12 08:45 | 显示全部楼层
在大多数现代编译器中,这两种写法在生成的机器代码层面是相同的,因此性能上没有区别
清芯芯清 发表于 2024-7-12 10:05 | 显示全部楼层
在维护代码时,选择一种团队成员都熟悉和偏好的写**更有利于代码的一致性和可维护性
gra22ce 发表于 2024-7-12 11:01 | 显示全部楼层
选择while (1)还是for (;;)主要取决于个人或团队的偏好。在实际编程中,重要的是保持一致性,选择一种风格并在整个项目中坚持使用。这样,无论是对于代码的原始作者还是后续的维护者,都能更容易地理解和维护代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

2689

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部