cperformanceooppost-incrementpre-increment

Is there a performance difference between i++ and ++i in C?


Is there a performance difference between i++ and ++i if the resulting value is not used?


Solution

  • Executive summary: No.

    i++ could potentially be slower than ++i, since the old value of i might need to be saved for later use, but in practice all modern compilers will optimize this away.

    We can demonstrate this by looking at the code for this function, both with ++i and i++.

    $ cat i++.c
    extern void g(int i);
    void f()
    {
        int i;
    
        for (i = 0; i < 100; i++)
            g(i);
    
    }
    

    The files are the same, except for ++i and i++:

    $ diff i++.c ++i.c
    6c6
    <     for (i = 0; i < 100; i++)
    ---
    >     for (i = 0; i < 100; ++i)
    

    We'll compile them, and also get the generated assembler:

    $ gcc -c i++.c ++i.c
    $ gcc -S i++.c ++i.c
    

    And we can see that both the generated object and assembler files are the same.

    $ md5 i++.s ++i.s
    MD5 (i++.s) = 90f620dda862cd0205cd5db1f2c8c06e
    MD5 (++i.s) = 90f620dda862cd0205cd5db1f2c8c06e
    
    $ md5 *.o
    MD5 (++i.o) = dd3ef1408d3a9e4287facccec53f7d22
    MD5 (i++.o) = dd3ef1408d3a9e4287facccec53f7d22