Wpis z mikrobloga

@TheMoonTheMoon: pytanie jak najbardziej słuszne, nie słuchaj tamtych idiotów, przecież dopiero się uczysz. odpowiedź jest troszkę bardziej skomplikowana. Polecam wrócić do problemu później, sam będziesz wiedział co, jak i dlacego.

optymalizacja kompilatora, miejsce przechowywania symbolu v (rw, r itd a to zalezy od targetu, opcji linkowania itd). sprawdź co się dzieje na innych targetach, z innymi opcjami kompilacji.
dlaczego? bo to "undefined behavior".

po skompilowaniu masz takie coś:

push rbp
mov
@dr__slim: on trolluje, on w przeciwienstwie do nas zna odpowiedzi na pytania ktore zadaje xD

tutaj ja nie do konca rozumiem dlaczego to nie dziala, ogolnie roznica z const a bez jest taka:

movl $5, -12(%rbp)
movl $10, -12(%rbp)
vs

movl $5, -12(%rbp)
leaq -12(%rbp), %rax
movl $10, (%rax)
Ja sie nie podejmuje wyjasnien dlaczego to drugie nie dziala, a debugowac mi sie nie chce bo od lat nie uzywalem gdb
@filozof900: Kompilator może se optymalizować. Nie wiem co tu się dzieje dokładnie, ale oczywiście pod adresem jest nowa wartość. Kompilator na bank gdzieś trzyma informację, że v = 5, a jak chcesz wymusić aby za każdym razem odczytywał wartość spod adresu musisz zadeklarować zmienną jako volatile const int.