См. Все остальные ответы о том, что он зависит от компилятора и кода, правила нет.
unsigned int x;
void one ( void )
{
x++;
}
void two ( void )
{
x--;
}
с оптимизацией
one:
addl $1, x(%rip)
ret
two:
subl $1, x(%rip)
ret
тот же компилятор, тот же код, тот жедень, без оптимизации, eax используется для обоих
one:
pushq %rbp
movq %rsp, %rbp
movl x(%rip), %eax
addl $1, %eax
movl %eax, x(%rip)
leave
ret
two:
pushq %rbp
movq %rsp, %rbp
movl x(%rip), %eax
subl $1, %eax
movl %eax, x(%rip)
leave
ret