Sobes.tech
Junior

Ako sa v pamäti používajú zásobník a halda?

sobes.tech AI

Odpoveď od AI

Stack sa používa na ukladanie lokálnych premenných, parametrov funkcií a adries návratu. Pamäť sa alokuje a uvoľňuje automaticky, podľa princípu LIFO (Last-In, First-Out).

Heap sa používa na dynamické alokovanie pamäti pre objekty, ktorých veľkosť je neznáma počas kompilácie alebo ich doba života presahuje oblasť viditeľnosti, v ktorej boli vytvorené. Správa pamäti na heap je vykonávaná manuálne alebo pomocou mechanizmov správy pamäti (ARC v Swift, garbage collector v iných jazykoch).

Prvok Stack Heap
Alokácia Automatická Dynamická (manuálna alebo pomocou MRC/ARC)
Uvoľnenie Automatické pri opustení oblasti viditeľnosti Manuálne (free) alebo pomocou MRC/ARC
Veľkosť dát Známa počas kompilácie Môže byť neznáma pred vykonaním
Prístup Rýchly, sekvenčný Pomalejší, náhodný
Štruktúra LIFO Graf objektov
Príklady Lokálne premenné, parametre funkcií Objektové triedy, štruktúry s variabilnou veľkosťou
// Príklad použitia stacku a heapu v Swift

func myFunction() {
    // Lokálna premenná na stacku
    var stackVariable: Int = 10

    // Objekt triedy na heapu
    let heapObject = MyClass()

    // Typ hodnoty na stacku (okrem štruktúr obsahujúcich referenčné typy)
    var stackStruct = MyStruct()

    // Štruktúra obsahujúca referenčný typ, časť môže byť na heapu
    var mixedStruct = MyMixedStruct()
}

class MyClass {
    // Vlastnosti objektu sa ukladajú na heap
    var property: String = "Hello"
}

struct MyStruct {
    // Vlastnosti hodnotového typu sa ukladajú na stack
    var property: Int = 20
}

class MyReferenceType {
    var value: Int = 30
}

struct MyMixedStruct {
    // Hodnotový typ na stacku
    var stackProperty: Int = 40
    // Referenčný typ na heapu (samotná referencia na stacku)
    var heapReference: MyReferenceType = MyReferenceType()
}