• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak dokładnie działa odwołanie do zmiennej?

VPS Starter Arubacloud
0 głosów
1,230 wizyt
pytanie zadane 3 marca 2016 w C i C++ przez Baakoma Użytkownik (780 p.)
Witam, od pewnego czasu nurtuje mnie sprawa z odwoływaniem się do zmiennej. Jeśli zmienna jest komórka pamięci lub kilkoma komórkami, to skąd program wie, że ma odwołać się akurat do tej zmiennej ? Wiem co to adresy i czytałem o szybie adresowej, niestety nie potrafię tego zrozumieć. Jeśli mamy zmienna x i wydamy polecenie, żeby wpisało ja na ekranie, to skąd program, kompilator wie, że chodzi akurat o ta zmienna, ,komórkę pamięci ? Jeśli każda zmienna ma adres , etykietę i wartość, to skąd wiadomo, że zmienna o tej etykiecie jest pod danym adresem? Mógłby mi ktoś przybliżyć ? Jeśli program ma 5 zmiennych, to skąd wie jakie to są i gdzie ich adres jest przechowywany, że program jest w stanie odwołać się za pomocą tego adresu do zmiennej ? Z góry dziękuję za odpowiedź :) pozdrawiam !;)

3 odpowiedzi

+4 głosów
odpowiedź 3 marca 2016 przez draghan VIP (106,230 p.)
wybrane 3 marca 2016 przez Baakoma
 
Najlepsza
Na poziomie o który pytasz, na poziomie magistrali i rozkazów procesora, nie ma pojęcia zmiennej. Są jedynie adresy pamięci, pod którymi zapisane są słowa binarne, czyli sekwencje bitów, reprezentujące wartości.

Pojęcie zmiennej istnieje tylko na etapie pisania programu i jego kompilacji - żeby ułatwić człowiekowi zamodelowanie fragmentu rzeczywistości.

Tak, jak pisze Sebastian - dla kompilatora zmienna jest pewną strukturą danych: posiada identyfikator, adres oraz wartość.

W trakcie kompilacji tworzona jest wewnętrznie lista zmiennych, użytych w programie - i do niej odwołuje się kompilator, kiedy próbuje posklecać program z tego, cośmy naskrobali w edytorze. Docelowo, w miejsce naszych pięknych przypisań:

int i = id;

będą w programie rozkazy kopiowania wartości spod adresu, który został na etapie kompilacji przypisany zmiennej id, do adresu który odpowiada zmiennej i.
komentarz 3 marca 2016 przez HaKIM Szeryf (87,590 p.)
Daję łapkę w górę. Dzięki za wyjaśnienie tego, czym jest adres pamięci.
komentarz 3 marca 2016 przez Baakoma Użytkownik (780 p.)
Dziękuję za wyjaśnienie, mógłbyś jeszcze przybliżyć mi jak wygląda taka lista zmiennych ? Coś na zasadzie tablicy, stosu ? Czy może coś bardziej skomplikowanego ?
komentarz 3 marca 2016 przez draghan VIP (106,230 p.)
Tutaj pojęcia nie mam, nie interesowałem się wewnętrzną budową kompilatora. Może adrian17 by wiedział, możesz wejść na IRC i spytać.

Pewnie coś, czego wygodnie jest użyć, jak właśnie tablica, chociaż to tylko strzał.
+2 głosów
odpowiedź 3 marca 2016 przez HaKIM Szeryf (87,590 p.)

 Dawno nie pisałem w c++, ale o ile `komórka` zawiera jakąś tam zmienną, na przykład:

int liczba = 2;

 To chyba logiczne jest, że owa komórka dostaje również `imię`. W tym przypadku liczba, kiedy odnosisz się do jakiejś zmiennej, to ona szuka w pamięci zmiennej o właśnie takiej nazwie, jeśli jej nie ma, to dostajesz błąd że nie została znaleziona, jeśli jest, to wyświetli Ci ją, jeżeli będziesz oczywiście tego oczekiwał.

 Wydaje mi się, że to trochę tak jak z panią Basią za ladą, mówisz że chcesz kajmaki, to ona szuka kajmaków, jeżeli znajdzie, to możesz je kupić, jeżeli to właśnie miałeś zamiar zrobić.

 Zapewne nie zrozumiałem pytania, bo nie wiem nic o adresach do zmiennej.

komentarz 3 marca 2016 przez Baakoma Użytkownik (780 p.)
Sęk w tym, że chodzi mi właśnie jak program szuka danej zmiennej, jak przechowuje etykiety razem z adresami, czy może ich nie przetrzymuje, ale podczas kompilowania w miejsce etykiet wstawia adres danej zmiennej, nie wiem :)
komentarz 3 marca 2016 przez HaKIM Szeryf (87,590 p.)
Co do szukania to pewnie ma już kompilator gdzieś wbudowaną ścieżkę do miejsca, gdzie takie rzeczy są przetrzymywane. Potem tylko uwzględnia Twoje nazwy zmiennych i szuka ich w swoim zbiorze danych.
komentarz 3 marca 2016 przez draghan VIP (106,230 p.)
Naprawdę dawno nie pisałeś w C++, skoro zapomniałeś o... :) Przecież w C++ istnieje coś takiego, jak wskaźnik - czyli mechanizm, dzięki któremu możemy operować na komórkach pamięci, poprzez użycie ich adresu. :)
komentarz 3 marca 2016 przez HaKIM Szeryf (87,590 p.)
Haha, to prawda. Ostatnio co pisałem, to był prosty program który obliczał wszystko, co tyczy się expa w wow'ie. Było to około 2 lata temu. :)
+2 głosów
odpowiedź 3 marca 2016 przez jeremus Maniak (59,720 p.)
w skrócie :

- kompilator zamienia nazwę zmienne na adres w pamięci

-kod wynikowy operuje  na adresach ( o nazwach nie ma już pojęcia )
komentarz 3 marca 2016 przez draghan VIP (106,230 p.)
W skrócie to się zgadza. :)

Podobne pytania

0 głosów
3 odpowiedzi 570 wizyt
0 głosów
1 odpowiedź 158 wizyt
0 głosów
1 odpowiedź 7,840 wizyt

92,963 zapytań

141,927 odpowiedzi

321,161 komentarzy

62,296 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...