A C és C++ kódban máshogy deklarálod az i és j változókat, ezért C esetében memóriába kerülnek és ott inkrementálódgatnak, C++ esetében viszont regiszterben. C99 már engedi ezt a "C++-féle" deklarációt is, -std=c99 opcióval fordítva gyorsul is a C változat valamennyit, de még mindig elmarad a C++ változattól.
Vannak még különbségek a generált asm kódban, de azok megértéséhez én már kevés vagyok.