Sobes.tech
Junior — Middle

Πώς υλοποιείται η διαδικασία αντίστροφης απελευθέρωσης μνήμης μέσα στο σύστημα;

sobes.tech AI

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

Στο Go, η διαδικασία απελευθέρωσης μνήμης υλοποιείται μέσω του ενσωματωμένου συλλέκτη απορριμμάτων (Garbage Collector). Παρακολουθεί αυτόματα τα αντικείμενα στη μνήμη που δεν χρησιμοποιούνται πλέον από το πρόγραμμα και τα απελευθερώνει.

Τα βασικά στάδια του συλλέκτη απορριμμάτων είναι:

  1. Σήμανση (Mark) — ο συλλέκτης διατρέχει όλες τις ενεργές αναφορές και σημαδεύει τα προσβάσιμα αντικείμενα.
  2. Καθάρισμα (Sweep) — τα μη σημαδεμένα αντικείμενα θεωρούνται μη χρησιμοποιούμενα και απελευθερώνονται.

Αυτό συμβαίνει στο παρασκήνιο, χωρίς να χρειάζεται από τον προγραμματιστή να διαχειρίζεται χειροκίνητα τη μνήμη, μειώνοντας την πιθανότητα σφαλμάτων που σχετίζονται με διαρροές μνήμης ή διπλή απελευθέρωση.

Παράδειγμα χρήσης μνήμης στο Go:

package main

import "fmt"

func main() {
    data := make([]int, 1000000) // κατανομή μνήμης
    fmt.Println(len(data))
    // Μετά την έξοδο από τη λειτουργία, το data γίνεται μη προσβάσιμο και θα καθαριστεί από τον συλλέκτη απορριμμάτων
}

Εδώ, η μνήμη του slice data θα απελευθερωθεί αυτόματα όταν δεν θα υπάρχουν πλέον αναφορές σε αυτό.