社区
其他
帖子详情
关于c中的“++”与“+=”的效率
wj19451880
2005-01-19 07:31:38
小弟刚遇到个问题,是关于运行的效率的
在C语言中有n++,可以实现加一,也可以用n +=1来实现
问题就来了,后者的运行花费的时间是前者的多少?假设是x86的
我的感觉是一样的啊,又不想是移位的那种算法又差别,都用三条汇编就完成的。
还有能不能把C中常用运算指令的运行效率跟大家说说~~~~
谢谢!!!!!!!!!
...全文
586
21
打赏
收藏
关于c中的“++”与“+=”的效率
小弟刚遇到个问题,是关于运行的效率的 在C语言中有n++,可以实现加一,也可以用n +=1来实现 问题就来了,后者的运行花费的时间是前者的多少?假设是x86的 我的感觉是一样的啊,又不想是移位的那种算法又差别,都用三条汇编就完成的。 还有能不能把C中常用运算指令的运行效率跟大家说说~~~~ 谢谢!!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
WangWeiGK
2005-04-15
打赏
举报
回复
钻牛角尖。
关于效率的问题不应该在这上面纠缠太多吧?
这是与编译器实现纠缠在一起的,没有绝对的答案。
xueqt
2005-04-10
打赏
举报
回复
效率相同,具体说明见
http://blog.csdn.net/xueqt/archive/2005/04/10/341628.aspx
xueqt
2005-04-10
打赏
举报
回复
效率相同,具体说明见
http://blog.csdn.net/xueqt/archive/2005/04/10/341628.aspx
xueqt
2005-04-10
打赏
举报
回复
效率相同,具体说明见
http://blog.csdn.net/xueqt/archive/2005/04/10/341628.aspx
AruS
2005-03-26
打赏
举报
回复
实际上 n+=1 要比 ++n快。。。
如果编译器 可以把 n+=1 优化成 ++n
++n 比 n++快,后者要创造一个临时变量以便返回
AruS
2005-03-26
打赏
举报
回复
NO,这个是要看编译器的。。。
PDD123
2005-03-26
打赏
举报
回复
用的地方都不一样。
gudengyeren
2005-03-25
打赏
举报
回复
i应该差不子多少吧,计算机运行那么快
weigoal
2005-02-17
打赏
举报
回复
一样的
XueBoy163
2005-02-17
打赏
举报
回复
N++的汇编是INC N吧?
CodeProject-Jerry
2005-02-16
打赏
举报
回复
反正都比 n = n + 1快
seedundersnow
2005-02-11
打赏
举报
回复
如果允许编译优化,通常应当是一样的。
wj19451880
2005-02-05
打赏
举报
回复
不好意思哈,这几天出差刚回来,才看到。谢谢朋友们的支持。
我在想的时候是遇到这样的问题,就是在一个缓冲里边取的是单个递增的(在网络中接受服务器的原始12位A/D(速率为单通道64K/采集卡)和其它的开关数据,由于数据量比较大,所以要考略效率问题),在定义协议的时候就是在客户端是用按通道排序好,还是按采样的次序排序的好,便于客户机的处理(客户机还有相当的任务要做,所以需要考略)。
下面假设是32通道的抽取数据的话:
基本的汇编意思的是:
a++: lea al memory
add al 1
mov al memory
a+=32: lea al memory
add al 32
mov al memory
如果是将a设置为寄存器变量的话可以提高大概3~5倍,但这常常是不允许的,况且还要经常的读取,顶多不过2倍。估计的。
我希望有哪位朋友能将其它的C 中的实现相同功能的语句进行效率排序,就像移位指令和乘除法指令一样的有很大的差别,我暂时还没有收集到这方面的“经书”,所以希望有朋友能把这些相关的资料贴上来供大家分享。谢谢
很感谢楼上的僵哥的费心回帖。
僵哥
2005-02-04
打赏
举报
回复
不好意思,上述测试代码有误,通过C转出的汇编代码看,效果是一样的。也就是说
a++与a+=1是等效的,写时可能写的是a++或a+=1但是编译器会转换为a=a+1,所以是等效的。
僵哥
2005-02-04
打赏
举报
回复
试验证明后者比前者效率高;
用下面的代码可以测得
======================
__int64 m;
__int64 n;
unsigned int s1,s2,e1,e2;
m=n=0;
s1=GetTickCount();
for(__int64 i=0;i<100000000;i++)m++;
e1=GetTickCount();
s2=GetTickCount();
for(__int64 i=0;i<100000000;i++)n+=1;
e2=GetTickCount();
ShowMessage("m++:"+IntToStr(e1-s1)+" n+=1:"+IntToStr(e2-s2));
======================
xcyxl
2005-02-02
打赏
举报
回复
有道理
zbtsv2005
2005-02-01
打赏
举报
回复
说的对
extreme0001
2005-01-28
打赏
举报
回复
前者效率更高,前者只在Register中运行
Goldbach
2005-01-27
打赏
举报
回复
gz
Kshape_zh
2005-01-24
打赏
举报
回复
后者的效率明显要快许多
加载更多回复(1)
关于i
++
和
++
i以及左值,右值
本文主要讲了关于i
++
和
++
i以及左值,右值的问题,希望对你的学习有所帮助。
C语言
中
++
和--运算的一些问题
C语言
中
++
和--运算的一些问题 欢迎下载。。 的
在vim
中
针对c
++
自动补全
在vim
中
针对c
++
自动补全 在vim
中
针对c
++
自动补全
计算 S=1!+2!+3!+...+N!。
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高
效率
程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
灵活应用C语言
中
的 /--运算符.pdf
灵活应用C语言
中
的 /--运算符
其他
256
社区成员
6,541
社区内容
发帖
与我相关
我的任务
其他
其他产品/厂家
复制链接
扫一扫
分享
社区描述
其他产品/厂家
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章