设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
++i和i++
1
2
/ 2 页
下一页
返回列表
查看:
1593
|
回复:
18
++i和i++
[复制链接]
cxh_nuaa_2001
cxh_nuaa_2001
当前离线
积分
65
IP卡
狗仔卡
发表于 2004-9-19 09:07:42
|
显示全部楼层
|
阅读模式
我曾经在一本书上看到,在单独用 i++ 或者 ++i 的时候,++i 比 i++的执行效率高一些。我想了半天,还是搞不明白。我看linux内核也都用的是i++,所以我就怀疑这个说法了。
有谁知道吗?是不是真的高一些啊?请详细的讲解一下,谢谢!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
jzh
jzh
当前离线
积分
26
IP卡
狗仔卡
发表于 2004-9-19 12:18:16
|
显示全部楼层
i++是先使用i的值后在自增,所以通常的实现为:
temp = i;
++i;
return temp;
很明显,多处了一个中间变量,建立和销毁这个中间变量就是
引起效率低下的原因。
回复
支持
反对
使用道具
举报
显身卡
iDay
iDay
当前离线
积分
934
IP卡
狗仔卡
发表于 2004-9-19 12:27:10
|
显示全部楼层
这个开销几乎可以不记吧。。。。。
回复
支持
反对
使用道具
举报
显身卡
jzh
jzh
当前离线
积分
26
IP卡
狗仔卡
发表于 2004-9-19 12:50:04
|
显示全部楼层
开销再少也要占时间和空间吧,你要是执行如
for(i=0; i < 1e6; i++) 等,i++ 和 ++i 的区别就大了。
这个是针对内建的数值对象而言。而且要是要c++,i如果是 某个类的一个对象,想象多一个temp对象的坏处吧。通常就意味着那将是两次拷贝构造函数和两次析构函数的调用。
回复
支持
反对
使用道具
举报
显身卡
iDay
iDay
当前离线
积分
934
IP卡
狗仔卡
发表于 2004-9-19 12:54:39
|
显示全部楼层
c++里有对象的这种操作吗?
回复
支持
反对
使用道具
举报
显身卡
jzh
jzh
当前离线
积分
26
IP卡
狗仔卡
发表于 2004-9-19 13:06:13
|
显示全部楼层
内建对象当然直接支持++。
自定义类当然得重载++操作符。
回复
支持
反对
使用道具
举报
显身卡
zbw76
zbw76
当前离线
积分
379
IP卡
狗仔卡
发表于 2004-9-19 19:31:06
|
显示全部楼层
经测试得出gcc 在编译的时候会把i++ ++i i+1 编译成都是用同样的累加指令,这个指令比add指令要快。所有这个命题应该是和具体的编译器相关的。
回复
支持
反对
使用道具
举报
显身卡
cxh_nuaa_2001
cxh_nuaa_2001
当前离线
积分
65
IP卡
狗仔卡
楼主
|
发表于 2004-9-20 11:32:39
|
显示全部楼层
jzh兄,我想知道,对与内建的类型的 ++i 和 i++ 是不是编译后也有
temp = i;
++i;
return temp;
这种情况?C++ 的重载++的情况我知道,但是象一些基本的类型,如int是不是也有上面这种情况呢?
还有,zbw76兄,是不是别的编译器也会按gcc那样编译++i 和 i++呢?
回复
支持
反对
使用道具
举报
显身卡
cxh_nuaa_2001
cxh_nuaa_2001
当前离线
积分
65
IP卡
狗仔卡
楼主
|
发表于 2004-9-20 11:38:42
|
显示全部楼层
我觉得对于基本的数据类型,如 int ,i++ 编译时可以先使用 i 变量,然后再 inc i。而不必要有
temp = i;
++i;
return temp;
这个操作,不知对不对。
还有这是不是跟具体的语言或者编译器有关。如 c++,它提供了运算符重载的功能,是不是有影响?
回复
支持
反对
使用道具
举报
显身卡
jzh
jzh
当前离线
积分
26
IP卡
狗仔卡
发表于 2004-9-20 23:05:15
|
显示全部楼层
to chx_nuaa_200:
对于基本数据类型.仅仅只是自增的话,也即
i++;
++i;
生成的汇编指令是一样的。
但可以肯定的是,对于类似赋值性质的语句,如
int num = i++;
int num = ++i;
肯定不一样,前一个语句一定会有一个中间变量来保存i的初始值。
然后i的值才递增。
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表