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