关于 i++ 和 ++i 的性能对比问题

纯小白,上次jd面试官问我,在使用效果相同的情况下,i++和++i哪个更好,我没答上来,后来反问面试官,面试官跟我说i++要多一步拷贝,我觉得确实有道理,回宿舍写了个代码想测试一下

int N = 8;
int a = N--;

N = 8;
int b = --N;

编译完看了下汇编代码,确实多了一行,单步调试终于搞懂了每行的含义

  40155d:	c7 45 fc 08 00 00 00 	movl   $0x8,-0x4(%rbp)  //N = 8
  401564:	8b 45 fc             	mov    -0x4(%rbp),%eax  //$eax = N
  401567:	8d 50 ff             	lea    -0x1(%rax),%edx  //$edx = $rax - 1
  40156a:	89 55 fc             	mov    %edx,-0x4(%rbp)  //N = $edx
  40156d:	89 45 f8             	mov    %eax,-0x8(%rbp)  //a = $eax

  401570:	c7 45 fc 08 00 00 00 	movl   $0x8,-0x4(%rbp)  //N = 8
  401577:	83 6d fc 01          	subl   $0x1,-0x4(%rbp)  //N -= 1
  40157b:	8b 45 fc             	mov    -0x4(%rbp),%eax  //$eax = N
  40157e:	89 45 f4             	mov    %eax,-0xc(%rbp)  //b = $eax

可是问题来了,这部分的编译结果为啥不能是这样呢

	movl	$8, -4(%rbp)
	movl	-4(%rbp), %eax
	movl	%eax, -8(%rbp)
	subl	$1, -4(%rbp)
	
	movl	$8, -4(%rbp)
	subl	$1, -4(%rbp)
	movl	-4(%rbp), %eax
	movl	%eax, -12(%rbp)

这样两种写法在性能上不就一样了吗

查看全部
Deadpixels
涼宮こなた
2020/11/28 19:57
  • c++
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

18个回复