Sobes.tech
Junior — Middle

Πώς γίνεται η μετατροπή του μήκους του slice στο πραγματικό του μέγεθος στη μνήμη;

sobes.tech AI

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

Στα Go, ένα slice είναι μια δομή που περιέχει:

  • έναν δείκτη σε έναν πίνακα,
  • το μήκος (len),
  • τη χωρητικότητα (cap).

Το μήκος του slice είναι ο αριθμός των στοιχείων που περιέχει, και το πραγματικό μέγεθος στη μνήμη εξαρτάται από τη χωρητικότητα και το μέγεθος του τύπου των στοιχείων.

Για παράδειγμα, αν έχετε ένα slice από int (συνήθως 8 bytes ανά στοιχείο) με μήκος 5 και χωρητικότητα 10, τότε στη μνήμη έχει δεσμευτεί χώρος για 10 στοιχεία (80 bytes), παρόλο που το μήκος είναι 5.

Το μέγεθος του slice στη μνήμη = sizeof(στοιχείο) * cap.

Κώδικας για επίδειξη:

package main
import (
    "fmt"
    "unsafe"
)
func main() {
    s := make([]int, 5, 10)
    fmt.Println("len:", len(s))
    fmt.Println("cap:", cap(s))
    fmt.Println("size in bytes:", unsafe.Sizeof(s[0])*uintptr(cap(s)))
}