Sobes.tech
Junior

Cum sunt utilizate stiva și heap-ul în memorie?

sobes.tech AI

Răspuns de la AI

Stiva este utilizată pentru stocarea variabilelor locale, a parametrilor funcțiilor și a adreselor de returnare. Memoria este alocată și eliberată automat, conform principiului LIFO (Last-In, First-Out).

Heap-ul (heap) este utilizat pentru alocarea dinamică a memoriei pentru obiecte a căror dimensiune nu este cunoscută în timpul compilării sau a căror durată de viață depășește domeniul în care au fost create. Gestionarea memoriei pe heap se face manual sau cu ajutorul mecanismelor de gestionare a memoriei (ARC în Swift, colector de gunoi în alte limbaje).

Caracteristică Stivă Heap
Alocare Automată Dinamică (manual sau cu MRC/ARC)
Eliberare Automat la ieșirea din domeniu Manual (free) sau cu MRC/ARC
Dimensiunea datelor Cunoscută în timpul compilării Poate fi necunoscută până la execuție
Acces Rapid, secvențial Mai lent, aleatoriu
Structură LIFO Grafic de obiecte
Exemple Variabile locale, parametri de funcții Obiecte de clasă, structuri cu dimensiune variabilă
// Exemplu de utilizare a stivei și heap-ului în Swift

func myFunction() {
    // Variabilă locală pe stivă
    var stackVariable: Int = 10

    // Obiect de clasă pe heap
    let heapObject = MyClass()

    // Tip de valoare pe stivă (cu excepția structurilor care conțin tipuri referențiale)
    var stackStruct = MyStruct()

    // Structură care conține un tip referențial, o parte poate fi pe heap
    var mixedStruct = MyMixedStruct()
}

class MyClass {
    // Proprietățile obiectului sunt stocate pe heap
    var property: String = "Hello"
}

struct MyStruct {
    // Proprietățile de tip valoare sunt stocate pe stivă
    var property: Int = 20
}

class MyReferenceType {
    var value: Int = 30
}

struct MyMixedStruct {
    // Tip de valoare pe stivă
    var stackProperty: Int = 40
    // Tip referențial pe heap (referința însăși pe stivă)
    var heapReference: MyReferenceType = MyReferenceType()
}