Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy referencja jest zmienną?

Ostatnio zmodyfikowano 2020-07-01 19:00
Autor Wiadomość
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?

P-177248
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:
C/C++
int main()
{
    int value = 5;
    int & ref = value;
    return value;
}
Wynik z flagą -O0:
Assembler
main:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-12], 5
        lea     rax, [rbp-12]
        mov     QWORD PTR [rbp-8], rax
        mov     eax, DWORD PTR [rbp-12]
        pop     rbp
        ret
Wynik z flagą -O2:
Assembler
main:
        mov     eax, 5
        ret
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;
.
P-177250
DejaVu
» 2020-06-30 19:26:57
https://stackoverflow.com​/questions/9342234​/how-references-are-internally-stored-in-c

References are just aliases internally the compiler treats them same as pointers.

/edit:
Skoro się dokształcasz to możesz jeszcze przeczytać sobie to:
https://stackoverflow.com​/questions/36375753​/a-reference-variables-address-and-value-c

W kursach masz również podstawowe informacje o referencji, ale z tego co zrozumiałem to bardziej interesuje Ciebie co się dzieje od strony kompilatora, więc poniższy dokument nie odpowiada na to pytanie. » Kurs C++ » Poziom 3Przekazywanie argumentów funkcji przez referencję lekcja
P-177251
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.
P-177261
« 1 »
  Strona 1 z 1