Junior — Middle
Ποιοι τύποι μνήμης υπάρχουν και πώς αλληλεπιδρούν μεταξύ τους;
sobes.tech AI
Απάντηση από AI
Στην Go (Golang), οι κύριοι τύποι μνήμης και η αλληλεπίδρασή τους είναι οι εξής:
-
Στοίβα (Stack) — αποθηκεύει τις τοπικές μεταβλητές των συναρτήσεων. Η στοίβα διατίθεται και απελευθερώνεται γρήγορα κατά την κλήση και την επιστροφή από συναρτήσεις.
-
Αheap (Heap) — χρησιμοποιείται για δυναμική κατανομή μνήμης, π.χ., για αντικείμενα που ζουν περισσότερο από τη τρέχουσα συνάρτηση. Η Go διαθέτει συλλέκτη απορριμμάτων που διαχειρίζεται τον καθαρισμό του heap.
-
Παγκόσμια/στατική μνήμη — για παγκόσμιες μεταβλητές και σταθερές.
Αλληλεπίδραση:
- Κατά την κλήση μιας συνάρτησης, οι τοπικές μεταβλητές τοποθετούνται στη στοίβα.
- Αν μια μεταβλητή πρέπει να ζήσει περισσότερο, ο μεταγλωττιστής μπορεί να την "μεταφέρει" στο heap (ανάλυση διαφυγής).
- Ο συλλέκτης απορριμμάτων ελευθερώνει αυτόματα τη μνήμη στο heap όταν τα αντικείμενα γίνουν μη προσβάσιμα.
Παράδειγμα:
func foo() *int {
x := 10
return &x // το x "φεύγει" στο heap, καθώς επιστρέφεται δείκτης
}
Εδώ, η μεταβλητή x θα τοποθετηθεί στο heap ώστε ο δείκτης να παραμείνει έγκυρος μετά την έξοδο από τη συνάρτηση.