免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: iw1210
打印 上一主题 下一主题

[C] 我认为设计 i++ 就是为了书写快捷的方便,其实执行效率与 i = i+1 一样。 [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
21 [报告]
发表于 2013-06-29 05:53 |只看该作者
话说回来,+=等等操作符还是很有意义的,因为操作数只计算一次。
比如说这样的式子:

getfoo()->n++;

getfoo()就仅调用一次,虽然对i来说计算一次两次没关系,但是++的操作数不一定只是简单的变量而已。90

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
22 [报告]
发表于 2013-06-29 10:10 |只看该作者
如果i是register呢?

论坛徽章:
1
金牛座
日期:2014-08-18 17:32:41
23 [报告]
发表于 2013-07-04 10:22 |只看该作者
楼主自己都说了是好的编译器才能生成和i++一样的机器码

历史上,早期,i++ 比 i = i+1 的机器指令更短,速度更快的

只是后期编译器做了优化而已

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
24 [报告]
发表于 2013-07-04 11:18 |只看该作者
其实这个问题可以从三个角度去分析:语言规范,编译器实现,CPU支持。首先从语言规范上来讲前置++和后置++是不等价的,前置++在规范中明确指出和+=组合操作符是等价的,但和E = E+1;这样的赋值操作不等价,因为后者对操作数E需要进行两次求值,而+=组合操作符只进行一次求值。后置++表示操作数作为结果值被获取之后操作数的原值再进行更新。 聪明的编译器可以根据应用场景进行优化,但不能过度依赖这种优化,因为编译器还是不如人聪明,而且复杂的表达式也不一定可以优化掉。从CPU的角度上来讲CPU支持什么样的指令集是绝对决定了相应操作符计算效率。在嵌入式开发中不同的CPU之间的差异就大了。比如说moto某些CPU就没有直接可以对应后缀++的指令,所以计算性能不如前缀++高。C/C++提供这么多操作符是因为它是最接近底层的高级语言,它需要尽可能实现CPU对应指令的高级实现进而为性能优化提供选择。而其它多数高级语言不会给你选择的权利。

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
25 [报告]
发表于 2013-07-05 09:16 |只看该作者
iw1210 发表于 2013-06-28 15:18
我认为设计 i++ 就是为了书写快捷的方便,其实执行效率与 i = i+1 一样。
还有 ++i、i-- 、--i、 i += n 、 ...

应该不是吧,学过汇编的都知道

论坛徽章:
0
26 [报告]
发表于 2013-07-08 08:43 |只看该作者
我晕,这也用讨论么
一条汇编就可以搞定的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP