首页 > 其他 > 详细

i++ i+=1 i=i+1 汇编代码效率比较

时间:2019-04-14 19:45:20      阅读:160      评论:0      收藏:0      [点我收藏+]

结论:一样。编译器和编译器之间可能有点区别但是程序不会变。

 


 

 

0x00

  一直不清楚到底是因为懒还是真的为了效率,要把" i = i + 1 "写成" i++ "或者" i += 1 ",

  今日闲来无事,尝试一下。

 

0x01

  直接的赋值语句。

  编译器:Dev-C++ 5.11

  代码:

void asd() {}
int main() {
    int i=0;
    i++;
    asd();  //方便在IDA中区分上下文
    i=i+1;
    asd();
    i+=1;
    return 0;
}

  反汇编:


mov     [rbp+i], 0    //i的初始化
add     [rbp+i], 1    //i++;
call    _Z3asdv         ; asd(void)
add     [rbp+i], 1    //i=i+1;
call    _Z3asdv         ; asd(void)
add     [rbp+i], 1    //i+=1;

  总结:一毛一样。

 

0x02

  换个编译器

  编译器:Microsoft Visual Studio 2013

  代码:跟上边的一样

  反汇编:  //突然变得裹脚布


mov     [ebp+i], 0      //i的初始化
mov     eax, [ebp+i]    //这三行是i++
add     eax, 1        //先取出i放到eax,加1之后再放回去
mov     [ebp+i], eax
call    sub_41110E      //void asd()
mov     eax, [ebp+i]    //这三行是i=i+1
add     eax, 1
mov     [ebp+i], eax
call    sub_41110E      //void asd()
mov     eax, [ebp+i]    //这三行是i+=1
add     eax, 1
mov     [ebp+i], eax

  总结:一毛一样。

 

0x03

  换一种语句,用for试试

  编译器:Dev-C++ 5.11

  代码:

void asd() {}
int main() {
    int i;
    for(i=0; i<5; i++) ;
    asd();
    for(i=1; i<6; i++) ;
    asd();
    for(i=2; i<7; i++) ;
    asd();
    return 0;
}

 

  反汇编:  总而言之还是那个样子。

技术分享图片

 

0x04

  换编译器:Microsoft Visual Studio 2013

  代码:和上边一样

  反汇编:    总而言之还是老样子。

技术分享图片

 

0x05

  还是不太放心

  试试,如果是两个变量呢?

  编译器:Dev-C++ 5.11

  代码:

void asd() {}
int main() {
    int i, j;
    asd();
    i=i+j;
    asd();
    i+=j;
    asd();
    return 0;
}

  反汇编: 

call    _Z3asdv         ; asd(void)
mov     eax, [rbp+var_8]
add     [rbp+var_4], eax
call    _Z3asdv         ; asd(void)
mov     eax, [rbp+var_8]
add     [rbp+var_4], eax
call    _Z3asdv         ; asd(void)

  一样。

 

0x06

  总结:i++、i=i+1、i+=1, 效果一样。

  i+=j、i=i+j,也是一样的

  但是既然能够少写两个字符,为什么还要多写两个呢?

  况且,用 i += j 的,总是看不起写 i = i + j 的。

 

i++ i+=1 i=i+1 汇编代码效率比较

原文:https://www.cnblogs.com/iishuu/p/10706580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!