Sobes.tech
Junior

Πώς χρησιμοποιούνται η στοίβα και η σωρός στη μνήμη;

sobes.tech AI

Απάντηση από AI

Η στοίβα χρησιμοποιείται για την αποθήκευση τοπικών μεταβλητών, παραμέτρων συναρτήσεων και διευθύνσεων επιστροφής. Η μνήμη διανέμεται και απελευθερώνεται αυτόματα σύμφωνα με την αρχή LIFO (Last-In, First-Out).

Ο σωρός (Heap) χρησιμοποιείται για δυναμική κατανομή μνήμης για αντικείμενα του οποίου το μέγεθος είναι άγνωστο κατά τη διάρκεια της μεταγλώττισης ή η διάρκεια ζωής τους υπερβαίνει το πεδίο στο οποίο δημιουργούνται. Η διαχείριση μνήμης στον σωρό γίνεται χειροκίνητα ή μέσω μηχανισμών διαχείρισης μνήμης (ARC στο Swift, garbage collector σε άλλες γλώσσες).

Χαρακτηριστικό Στοίβα Σωρός
Κατανομή Αυτόματη Δυναμική (χειροκίνητα ή με MRC/ARC)
Απελευθέρωση Αυτόματα κατά την έξοδο από το πεδίο Χειροκίνητα (free) ή με MRC/ARC
Μέγεθος δεδομένων Γνωστό κατά τη μεταγλώττιση Μπορεί να είναι άγνωστο μέχρι την εκτέλεση
Πρόσβαση Γρήγορη, διαδοχική Αργότερη, τυχαία
Δομή LIFO Γράφος αντικειμένων
Παραδείγματα Τοπικές μεταβλητές, παράμετροι συναρτήσεων Αντικείμενα κλάσεων, δομές με μεταβλητό μέγεθος
// Παράδειγμα χρήσης της στοίβας και του σωρού σε Swift

func myFunction() {
    // Τοπική μεταβλητή στη στοίβα
    var stackVariable: Int = 10

    // Αντικείμενο κλάσης στον σωρό
    let heapObject = MyClass()

    // Τύπος τιμής στη στοίβα (εκτός από δομές που περιέχουν αναφορικούς τύπους)
    var stackStruct = MyStruct()

    // Δομή που περιέχει αναφορικό τύπο, μέρος μπορεί να βρίσκεται στον σωρό
    var mixedStruct = MyMixedStruct()
}

class MyClass {
    // Τα χαρακτηριστικά του αντικειμένου αποθηκεύονται στον σωρό
    var property: String = "Hello"
}

struct MyStruct {
    // Τα χαρακτηριστικά τύπου τιμής αποθηκεύονται στη στοίβα
    var property: Int = 20
}

class MyReferenceType {
    var value: Int = 30
}

struct MyMixedStruct {
    // Τύπος τιμής στη στοίβα
    var stackProperty: Int = 40
    // Αναφορικός τύπος στον σωρό (η ίδια η αναφορά στη στοίβα)
    var heapReference: MyReferenceType = MyReferenceType()
}