Na jakim stosie? Matka wie że ćpiesz? x
jest zmienną na stosie i w tym kodzie będzie jedyna zmienną na stosie. Kompilator tutaj pewnie w ogóle oleje tą wartość tymczasową po x++ skoro jej nie używasz, a nawet jakbyś używał to trzymałby ją w rejestrze procesora. Printf utworzy nową ramkę stosu wykonania funkcji, ale jest tam jeden argument i może zostać przekazany przez rejestry a nie przez stos. A nawet jeśli przez stos to przecież trafi tam wartość x czyli 1.
Serio, zmień dilera.
Zresztą sprawdźmy!
https://godbolt.org/g/WYqhNY
mov DWORD PTR [rbp-4], 1
add DWORD PTR [rbp-4], 1
mov eax, DWORD PTR [rbp-4]
mov esi, eax
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
Jest tak jak mówiłem -> jest jedna zmienna środowiskowa na stosie pod rbp-4
. Ten tymczasowy wynik z x++ w ogóle jest olewany bo widać że w kodzie mamy tylko x=1
oraz x=x+1
a potem wywołany jest printf z parametrami w rejestrach esi
, edi