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()
}