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