Sobes.tech
Junior

Kako se u memoriji koriste stek i hrpa?

sobes.tech АИ

Одговор од АИ

Стек се koristi za skladištenje lokalnih promenljivih, parametara funkcija i adresa povratka. Memorija se automatski dodeljuje i oslobađa prema principu LIFO (Last-In, First-Out).

Heap (heap) se koristi za dinamičko dodeljivanje memorije za objekte čija veličina je nepoznata tokom vremena kompilacije ili čiji opseg trajanja prevazilazi kontekst u kojem su kreirani. Upravljanje memorijom na heap-u se vrši ručno ili pomoću mehanizama za upravljanje memorijom (ARC u Swift-u, sakupljač smeća u drugim jezicima).

Osobina Stek Heap
Dodeljivanje Automatsko Dinamičko (ručno ili sa MRC/ARC)
Oslobađanje Automatski pri izlasku iz opsega Ručno (free) ili sa MRC/ARC
Veličina podataka Poznata tokom kompilacije Može biti nepoznata do izvršenja
Pristup Brz, sekvencijalni Sporiji, slučajni
Struktura LIFO Graf objekata
Primeri Lokalni promenljivi, parametri funkcija Objekti klasa, strukture sa promenljivom veličinom
// Primer korišćenja steka i heap-a u Swift-u

func myFunction() {
    // Lokalna promenljiva na steku
    var stackVariable: Int = 10

    // Objekat klase na heap-u
    let heapObject = MyClass()

    // Tip vrednosti na steku (osim struktura koje sadrže referentne tipove)
    var stackStruct = MyStruct()

    // Struktura koja sadrži referentni tip, deo može biti na heap-u
    var mixedStruct = MyMixedStruct()
}

class MyClass {
    // Svojstva objekta se čuvaju na heap-u
    var property: String = "Hello"
}

struct MyStruct {
    // Svojstva vrednosnog tipa se čuvaju na steku
    var property: Int = 20
}

class MyReferenceType {
    var value: Int = 30
}

struct MyMixedStruct {
    // Vrednosni tip na steku
    var stackProperty: Int = 40
    // Referentni tip na heap-u (referenca na steku)
    var heapReference: MyReferenceType = MyReferenceType()
}