两个问题讨论下,大家给点意见

lala_benben 2008-07-03 09:37:44
1。下面哪个效率最高:
A i+=1;
B i=i+1;
C i++;
D ++i;



2.1000+1和1+1000 有什么区别。。
...全文
125 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andrwyw 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbger 的回复:]
1.给编译器相关,看汇编VS2005:
int i = 0;
0041138E mov dword ptr [i],0
i += 1;
00411395 mov eax,dword ptr [i]
00411398 add eax,1
0041139B mov dword ptr [i],eax
i = i+1;
0041139E mov eax,dword ptr [i]
004113A1 add eax,1
004113A4 mov dword ptr [i],eax
i++;
004113A7 mov eax,dword ptr [i]
004113AA add e…
[/Quote]

up up
fouryu 2008-07-07
  • 打赏
  • 举报
回复
A和B只是同一个意思的不同写法,编译结果完全一样;
C和D因为存在先算++和后算++的问题,所以在编译处理上是不一样的。一般情况下,如果一个孤立的语句i++会比++i多生成一条汇编指令。至于编译优化,一般都能解决多余指令的问题。

如果是在32位或16位系统上1000+1和1+1000应该是没有什么区别的,但是如果是在8位系统,由于1000这个数据一个寄存器放不下,就存在较大的区别。

楼主要研究编译器么?
angelcm51 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Jerrylearnc 的回复:]
想问问 第一个问题 是不是和编译器有关 谢谢 非常感谢
[/Quote]
编译器相关
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bysdy 的回复:]
学习下~~~
[/Quote]
angelcm51 2008-07-07
  • 打赏
  • 举报
回复
这问题。。。
这F
Jerrylearnc 2008-07-07
  • 打赏
  • 举报
回复
想问问 第一个问题 是不是和编译器有关 谢谢 非常感谢
bysdy 2008-07-03
  • 打赏
  • 举报
回复
学习下~~~
zhangxichao 2008-07-03
  • 打赏
  • 举报
回复
呵呵,在很低级的编译器上(如学生作业),可能会有些差别。对于聪明的编译器,打开其优化开关,对于lz给出的语句,相信她会结合上下文给出效率最高的目标码,至于1+1000,和1000+1,很难想象编译器在生成目标码时不进行常量折叠(编译时已经计算出两个常量的和,不必再等到运行时)。
HelloDan 2008-07-03
  • 打赏
  • 举报
回复
2.1000+1和1+1000 有什么区别。。
得到的结果与效率上没有区别。但在实现上放在哪个寄存器有区别。
dbger 2008-07-03
  • 打赏
  • 举报
回复
1.给编译器相关,看汇编VS2005:
int i = 0;
0041138E mov dword ptr [i],0
i += 1;
00411395 mov eax,dword ptr [i]
00411398 add eax,1
0041139B mov dword ptr [i],eax
i = i+1;
0041139E mov eax,dword ptr [i]
004113A1 add eax,1
004113A4 mov dword ptr [i],eax
i++;
004113A7 mov eax,dword ptr [i]
004113AA add eax,1
004113AD mov dword ptr [i],eax
++i;
004113B0 mov eax,dword ptr [i]
004113B3 add eax,1
004113B6 mov dword ptr [i],eax

2.没区别,编译器在编译过程中就会计算出结果的

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧