Is x += 1 more efficient than x = x + 1?

前端 未结 6 1713
青春惊慌失措
青春惊慌失措 2020-12-03 22:08

In x = x + 1, is x evaluated twice? If so, does that mean in x += 1, x is only evaluated once? How are the two expression

6条回答
  •  离开以前
    2020-12-03 22:47

    Just to give you a "real-world" example, consider this program:

    int main()
    {
        int i = 0;
        i += 1;
        i++;
        i = i + 1;
        return 0;
    }
    

    Compiling it with GCC, in Darwin 11 with the following flags:

    • -S stop in assembler
    • -m32 to 32-bit platform, just to simplify things a bit

    Will generate the following program, except for the comments and blank lines which I added. Take a look specially in the comments.

            .section        __TEXT,__text,regular,pure_instructions
            .globl  _main
            .align  4, 0x90
    _main:
            pushl   %ebp              # cdecl function stuff
            movl    %esp, %ebp        #
            subl    $12, %esp         # get room for variables    
            movl    $0, -12(%ebp)     # i = 0;
    
            ; i += 1
            movl    -12(%ebp), %eax   # load i in register a
            addl    $1, %eax          # add 1 to register a
            movl    %eax, -12(%ebp)   # store it back in memory
    
            ; i++
            movl    -12(%ebp), %eax   #
            addl    $1, %eax          # just the same
            movl    %eax, -12(%ebp)   #
    
            ; i = i + 1
            movl    -12(%ebp), %eax   #
            addl    $1, %eax          # just the same
            movl    %eax, -12(%ebp)   #
    
            movl    $0, -8(%ebp)
            movl    -8(%ebp), %eax
            movl    %eax, -4(%ebp)
            movl    -4(%ebp), %eax
            addl    $12, %esp
            popl    %ebp
            ret
    
    .subsections_via_symbols
    

提交回复
热议问题