Jason. Cała informatyka w jednym miejscu!

Dzisiaj przyjrzymy się uważnie co się dzieje "pod spodem" w chwili tworzenia obiektów i definiowania zmiennych. To już dotyka niskich warstw systemu w kwestii przydzielania pamięci, aczkolwiek każdy programista powinien wiedzieć jak to wygląda w praktyce. Pokażę Wam jak wygląda stos i sterta. Pokażę czym się różnią te struktury danych od siebie oraz na czym polega przechowywanie danych na jednym i drugim.

STOS I STERTA. KONFRONTACJA STRUKTUR DANYCH

Zacznę od definicji. Struktura danych to sposób przechowywania obiektów (w sensie zaalokowanych rzeczywistych miejsc) w pamięci komputera. Rzucimy okiem na dwa podstawowe, na stos i stertę jednak jest ich o wiele więcej, które zawsze możemy zaimplementować. Stos i sterta to podstawowe struktury, które musicie umieć dostrzec i rozróżnić niezależnie od tego, czy sami alokujecie pamięć, czy robi to za Was język.

Stos to podstawowa struktura przechowywania danych. Polega on na "kładzeniu" danych i wywołań metod jedna na drugiej. Przechowuje również zmienne lokalne, które mogą występować w funkcjach jako parametry formalne, bądź dodatkowe zmienne umieszczane w środek bloku kodu. Cechą charakterystyczną stosu jest sposób obsługi danych. Przypomina on stos talerzy, z którego nie możemy wyjąć elementu ze spodu ani ze środka. Możemy jedynie operować na wierzchu stosu, na elemencie który został dodany jako najnowszy. W przypadku wywołań metod to również ma sens, bo to określa cykl życia funkcji (i zawartych zmiennych lokalnych), jak również kolejność wykonywania czynności w metodach gdzie pierwszeństwo ma zawsze ta najbardziej wysunięta na górze.

Sterta z kolei to struktura polegająca na obsługiwaniu "połączeń" do obiektów czy struktur (jak w C) na podstawie adresu (referencji). Dzięki temu, możliwym staje się przedostawanie do określonego obiektu poprzez adres przechowany w innej zmiennej, we wskaźniku. W językach wysokiego poziomu, zmienne typu klasowego przechowują NIE same w sobie obiekty, tylko odniesienia do nich w postaci referencji! Zapamiętajcie tę informację, ona jest najważniejsza! Druga rzecz to taka, że dane osadzone na stercie nie usuwają się automatycznie tak jak ma to miejsce przy stosie, tylko trzeba samemu zadbać o zwolnienie pamięci, aby nie doszło do wycieku. Nawet gdy obiekt jest sam w sobie zmienną lokalną umieszczoną w bloku metody, to i tak umieszczony on jest na stercie i "podpięty" pod adres jaki otrzymuje zmienna referencyjna.

Stos w programowaniu Sterta w programowaniu

Dwie podstawowe struktury danych, które trzeba znać to stos i sterta. Różnią się sposobem przechowywania danych oraz przeznaczeniem.


To wszystko w tym temacie. Krótko i zwięźle, bo to jest wiedza uniwersalna i nie ma żadnych ekskluzywnych cech wpisanych w jakiś język programowania, aczkolwiek każdy piszący regularnie kod musi dostrzegać te różnice jak zachowuje się w pamięci stos i sterta, bez względu na to, czy korzysta z wygodnych odśmiecaczy pamięci Javy, czy manualnie zarządza pamięcią w C.

PODOBNE ARTYKUŁY