Junior — Middle
Bij het doorgeven van gegevens aan een functie: wat is efficiënter qua geheugengebruik — een array of een slice?
sobes.tech AI
Antwoord van AI
In Go hebben arrays een vaste grootte en worden ze volledig in het geheugen opgeslagen, terwijl slices een structuur zijn die een pointer naar een array, een lengte en een capaciteit bevat.
Vanuit geheugengebruik gezien:
- Array: neemt precies genoeg geheugen in voor alle elementen, de grootte is bekend tijdens compilatie.
- Slice: neemt zelf maar weinig geheugen in (drie woorden: pointer, lengte, capaciteit), maar wijst naar een array die de gegevens opslaat.
Bij het doorgeven aan een functie:
- Als een array wordt doorgegeven, wordt deze volledig gekopieerd, wat kostbaar kan zijn qua geheugen en tijd bij grote arrays.
- Als een slice wordt doorgegeven, wordt alleen de slice-structuur gekopieerd (pointer + lengte + capaciteit), en de gegevens blijven in de originele array, dus er vindt geen kopie van de gegevens plaats.
Daarom is het doorgeven van een slice efficiënter qua geheugen en prestaties, vooral voor grote datasets.
Voorbeeld:
func processArray(arr [1000]int) {
// kopieert de hele array
}
func processSlice(s []int) {
// kopieert alleen de slice-structuur
}
func main() {
var a [1000]int
processArray(a) // kostbaar
processSlice(a[:]) // efficiënt
}