Typy wartościowe i referencyjne a stos i sterta

ASP NET MVC i C#
typy wartosciowe referencyjne stos sterta c sharp

Poznanie właściwości i zastosowań typów prostych i referencyjnych jest kluczowe dla poznania bardziej zaawansowanych cech języka C#.

Z tymi typami nierozerwalnie wiąże się pojęcie stosu i sterty jako miejsca w pamięci. Nie należy ich mylić z tak samo nazwanymi strukturami do przechowywania danych (kolejka, lista itp).

W tym przypadku mówimy o stosie i stercie jako o miejscu w pamięci wirtualnej przydzielanej aplikacji podczas uruchamiania.

Sterta:

  • trafiają tu między innymi instancje klas, interfejsy, tablice, delegaty (natomiast wskaźniki <<adresy>> do tych instancji lądują na stosie)
  • jest obsługiwana przez maszynę wirtualną .NET
  • często elementy trafiające na stertę są tworzone operatorem new
  • wspólna dla wszystkich wątków
  • obiekty na stercie są obsługiwane przez Garbage Collector

Stos:

  • trafiają tu typy wartościowe i wskaźniki do typów referencyjnych (same instancje tych obiektów lądują na stercie)
  • nie jest obsługiwany przez Garbage Collectora

 

Typy wartościowe:

  • podstawowy typ danych
  • przy deklaracji kompilator rezerwuje odpowiednią ilość miejsca w pamięci, która jest znana z definicji typu na przykład Int32 potrzebuje 32 bitów
  • dziedziczą po ValueType, która z kolei dziedziczy po Object
  • należą do nich: bool, char, decimal, double, float, sbyte, short, int, long, byte, ushort, uint, ulong
  • należą do nich wszystkie struktury (struct) (nie tylko powyższe)
  • należy do nich typ wyliczeniowy: enum
  • trafiają na stos



Typy referencyjne:

  • złożone typy danych
  • ich usunięcie z pamięci jest automatycznie obsługiwane przez Garbage Collector (kiedy znikną referencje do instancji obiektu)
  • należą do nich: object, string, tablice, delegaty, klasy, interfejsy, zdarzenia
  • trafiają na stertę

Źródła: Źródła własne

Tomasz Osiński Tomasz Osiński
Typy wartościowe i referencyjne a stos i sterta
2017-05-02 18:36:46
Komentarze
Aby dodac komentarz musisz być zalogowany

Zobacz podobne artykuły

Nazywam się Tomasz Osiński. Jestem programistą web developerem od 2008 roku. Obecnie pracuję w Banku Millennium jak .NET web developer, poza tym rozwijam startupy, blogguję. Pokazuję, że za pomocą ASP.NET, HTML, CSS i JS można budować wydajne aplikacje i strony internetowe. Ukazuję potrzeby wdrażania nowoczesnego podejścia do zarządzania w IT (Lean, Kanban, SCRUM, Agile)

Blog, który czytasz tworzę w w/w technologiach i udostępniam na GitHubie