Sobes.tech
Junior — Middle

Môžete vysvetliť rozdiel medzi zásobníkom a haldou?

sobes.tech AI

Odpoveď od AI

Zásobník a halda sú dve odlišné oblasti pamäte používané v C# na ukladanie údajov, a líšia sa spôsobom správy a účelom.

  • Zásobník (Stack) — je oblasť pamäte, kde sú uložené lokálne premenné a parametre metód. Funguje podľa princípu LIFO (posledný vošiel, prvý vyšiel). Pamäť na zásobníku sa automaticky prideľuje a uvoľňuje pri vstupe a výstupe z funkcií, čo je veľmi rýchle. Na zásobníku sa ukladajú hodnoty primitívnych typov a odkazy na objekty.

  • Heap (halda) — je oblasť pamäte pre dynamické prideľovanie objektov. Keď sa vytvorí objekt pomocou new, pamäť sa prideľuje na halde. Správa pamäte na halde je vykonávaná Garbage Collectorom, ktorý uvoľňuje nepoužívané objekty. Halda je flexibilnejšia, ale operácie prideľovania a uvoľňovania sú pomalšie ako na zásobníku.

Príklad:

void Example()
{
    int x = 10; // x je uložené na zásobníku
    MyClass obj = new MyClass(); // obj je referencia na zásobníku, objekt je na halde
}

Tu je x lokálna premenná na zásobníku, a obj je referencia na zásobníku, ukazujúca na objekt na halde.