Algorithm 版 (精华区)
发信人: Lerry (life is waiting...), 信区: Algorithm
标 题: [合集]听说
发信站: 哈工大紫丁香 (2003年11月27日18:39:25 星期四), 站内信件
────────────────────────────────────────
jijian (CC) 于 2003年10月18日19:10:44 星期六 说道:
++i 比 i++快
────────────────────────────────────────
iamxiaohan (潇寒) 于 2003年10月18日21:07:27 星期六 说道:
nod
++i就是一个指令 inc
而i++是
int temp = i ;
i = i+1 ;
return temp ;
────────────────────────────────────────
JINNIE (jinnie) 于 Sun Oct 19 00:41:17 2003 说道:
1,不能用汇编解释++i,而用C语言来解释i++;
2,其次,++i也需要返回值;
────────────────────────────────────────
iamxiaohan (潇寒) 于 2003年10月19日01:13:23 星期天 说道:
虽然一个用汇编解释一个用C解释有点搞笑,
但实际情况就是这样的,
不信你可以反汇编看看,
++i返回的是i的地址,可以做为左值,&++i是可以的,而&i++是不可以的
────────────────────────────────────────
JINNIE (jinnie) 于 Sun Oct 19 23:07:18 2003 说道:
在VC6下调试模式下汇编结果:
10: i++;
00401903 mov eax,dword ptr [ebp-10h]
00401906 add eax,1
00401909 mov dword ptr [ebp-10h],eax
11: (++i) = 5;
0040190C mov ecx,dword ptr [ebp-10h]
0040190F add ecx,1
00401912 mov dword ptr [ebp-10h],ecx
00401915 mov dword ptr [ebp-10h],5
以前还不知道(++i)竟然是个左值,多谢!
────────────────────────────────────────
jijian (CC) 于 2003年10月20日09:05:08 星期一 说道:
那么 ++i 的反汇编是inc吗
有的资料说两个都有返回值。
────────────────────────────────────────
iamxiaohan (潇寒) 于 2003年10月20日09:11:39 星期一 说道:
这个与编译器有关,
我用Borland C++ 5.6 ,ida反汇编结果就是inc
i++是有返回值,返回的是一个临时变量的值,
而++i返回的是左值,
对于i++
可以理解为
{
int temp = i ;
i=i+1;
return temp;
}
当然,实际汇编结果并不一定是这样,
对于不同的编译器会做不同的优化,
像对于bc 5.6 ,它就非常聪明,
如果只有
i++
或
++i
而没有其它语句,它就全产生成 inc 指令,
因此,对于 bc5.6
for(int i = 0 ; i<10 ;i++)
的速度与
for(int i =0 ; i<10 ; ++i)
其实是一样的,它们的指令被汇编成一样的了,
但对于一些其它的编译器就不一定了,第一条语句要比第二条慢些。
你可以用一些编译器反汇编看下,
纯C论坛上,逆向工程版面有ida提供下载!:)
────────────────────────────────────────
jijian (CC) 于 2003年11月17日18:40:36 星期一 说道:
FFT可以将两个大数的乘除运算时间由O(n2)缩短为O(nlog(n))。
────────────────────────────────────────
pineapple (菠萝) 于 2003年11月17日18:49:34 星期一 说道:
时间常数比较大, 计算真正的天文数字才能看出优势. 几万位的小打小闹是没有必要的
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.154毫秒