Hi, nie wiem czy dobry dział, jeśli nie, proszę o przeniesienie.
Pojawiła się w mojej głowie taka niejasność.
Otóż w momencie, kiedy inicjalizujemy zmienne, kompilator/interpeter/whatevea kojarzy sobie daną nazwę
z konkretnym adresem w pamięci. Wie też ile pamięci ma zaalokować, no bo typ jakoś sobie wywnioskuje sam, czy też programista mu poda. To jakby jest jasne.
Pytanie moje brzmi jednak następująco: jak to się dzieje, że potem, poza momentem inicjalizacji, nasz program wie, ile bajtów z pamięci odczytać? Gdzie zacząć czytać, to oczywiste - ma adres powiązany ze zmienną, więc tam zaczyna. Skąd ma jednak wiedzieć kiedy skończyć, po ilu bajtach?
Czy kompilator/interpeter/whateva trzyma sobie gdzieś informacje o tym, jakiego typu jest dana zmienna pod danym adresem, zatem wie też ile bajtów ma przeczytać?
Jak to wygląda np. w Assemblerze czy C? W C sprawa mi się wydaje nieco prostsza, bo mamy wszędzie typy.
A np. w Pythonie czy innym dynamicznie typowanym języku? Okej, tutaj mamy referencje i valuesy + interpreter sobie ogarnie typ danej wartości, ale bardziej ciekawi mnie tutaj jak sobie radzi ze skomplikowanymi typami/obiektami? Pod spodem tam pewnie jakieś structy są, przynajmniej w CPythonie?
Czyli interesuje mnie trochę jak to wygląda poziom niżej, jeśli idzie o tworzenie, czytanie i wykorzystywanie zmiennych.
Będę wdzięczny za odpowiedzi czy też linki do jakiś materiałów w tej tematyce, zwłaszcza w Pythonie.