打印
[应用方案]

用汇编看一下无限循环写法区别

[复制链接]
827|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LOVEEVER|  楼主 | 2024-5-23 20:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


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

编译前:

while (1);

编译后:

mov eax,1
test eax,eax
je foo+23h
jmp foo+18h

编译前:

for (;;);

编译后:

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(;;)用的比较好吧

使用特权

评论回复
5
yuliangren| | 2024-7-11 16:22 | 只看该作者
这个我也注意过,好像就用操作系统的话,用for(;;)比较多

使用特权

评论回复
6
hight1light| | 2024-7-11 17:25 | 只看该作者
在C和C++编程语言中,while (1)和for (;;)都是用来创建无限循环的常见方法。这两种方法在功能上是完全等价的,因为它们都会导致循环无限执行,直到遇到显式的break语句或其他退出机制

使用特权

评论回复
7
nuan11nuan| | 2024-7-11 18:27 | 只看该作者
while (1):这种写法直接明了,表明循环条件是恒为真,因此会无限循环。for (;;):这种写法在形式上更为传统,因为它遵循了for循环的标准结构,但循环条件部分为空,这可能会让不熟悉这种用法的程序员感到困惑

使用特权

评论回复
8
eleg34ance| | 2024-7-11 20:30 | 只看该作者
有些开发者或团队可能更倾向于使用while (1),因为它更直观地表达了无限循环的意图。另一些开发者或团队可能更喜欢for (;;),因为它遵循了for循环的结构,即使在这种特殊情况下循环条件为空

使用特权

评论回复
9
suiziq| | 2024-7-12 08:45 | 只看该作者
在大多数现代编译器中,这两种写法在生成的机器代码层面是相同的,因此性能上没有区别

使用特权

评论回复
10
清芯芯清| | 2024-7-12 10:05 | 只看该作者
在维护代码时,选择一种团队成员都熟悉和偏好的写**更有利于代码的一致性和可维护性

使用特权

评论回复
11
gra22ce| | 2024-7-12 11:01 | 只看该作者
选择while (1)还是for (;;)主要取决于个人或团队的偏好。在实际编程中,重要的是保持一致性,选择一种风格并在整个项目中坚持使用。这样,无论是对于代码的原始作者还是后续的维护者,都能更容易地理解和维护代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

297

主题

2027

帖子

4

粉丝