Czy referencja jest zmienną?
Ostatnio zmodyfikowano 2020-07-01 19:00
dlakin95 Temat założony przez niniejszego użytkownika |
Czy referencja jest zmienną? » 2020-06-30 18:55:27 Cześć,
Spotkałem się w internecie ze stwierdzeniem, że referencja nie jest zmienną? Zastanawiam się jak to wygląda od strony programu. Czy jeśli zdefiniujemy sobie np. w funkcji referencję, to czy jest rezerwowana na stosie pamięć dla tej referencji? Czy może kompilator w momencie użycia referencji w wyrażeniu wstawia zmienną pod referencją, a sama referencja w programie wynikowym nie istnieje?
Czy mógłby mi ktoś uświadomić, jak to działa?
|
|
jankowalski25 |
» 2020-06-30 19:24:28 To zależy od optymalizacji. Nawet jeśli utworzysz normalną zmienną, to ona też może nie istnieć w pamięci i trafić do jakiegoś rejestru. Jak chcesz to zobaczyć na niższym poziomie abstrakcji, to możesz przejrzeć kod asemblera przez stronę https://godbolt.org/. Spróbuj na przykład wpisać jakiś kod i dać flagę -O0, a później dać tam -O2 i zobaczyć, co się zmieniło. Dopisano:Przykład: int main() { int value = 5; int & ref = value; return value; } Wynik z flagą -O0: Wynik z flagą -O2: Jak widać, w pierwszym przypadku istnieje zmienna value oraz ref jako referencja do niej (akurat przy takim kompilatorze referencja daje identyczny kod w assemblerze, jak wskaźnik). Natomiast po włączeniu optymalizacji całość sprowadza się do działań na rejestrach i jest równoznaczne z wpisaniem na sztywno return 5; . |
|
DejaVu |
» 2020-06-30 19:26:57 |
|
dlakin95 Temat założony przez niniejszego użytkownika |
» 2020-07-01 19:00:17 Dzięki wielkie za pomoc. Wszytko jest już dla mnie jasne. |
|
« 1 » |