Sobes.tech
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 ώστε ο δείκτης να παραμείνει έγκυρος μετά την έξοδο από τη συνάρτηση.