Junior — Middle
Adatok átadásakor egy függvénynek: melyik hatékonyabb memóriahasználat szempontjából — egy tömb vagy egy szelet?
sobes.tech MI
Válasz az MI-től
A Go-ban a tömbök fix méretűek és teljes egészében a memóriában tárolódnak, míg a szeletek (slices) egy olyan struktúrák, amelyek mutatót tartalmaznak egy tömbre, valamint hosszúságot és kapacitást.
Memóriahasználat szempontjából:
- Tömb: pontosan annyi memóriát foglal el, amennyi az összes elem számára szükséges, a méret fordítási időben ismert.
- Slice: önmagában kevés memóriát foglal (három szó: mutató, hossz, kapacitás), de egy olyan tömbre mutat, amely tárolja az adatokat.
Függvénybe adáskor:
- Ha tömböt adunk át, az egész másolódik, ami nagy méretű tömbök esetén memória- és időigényes lehet.
- Ha szelet adunk át, csak a szelet struktúrája (mutató + hossz + kapacitás) másolódik, az adatok az eredeti tömbben maradnak, így adatmásolás nem történik.
Ezért a szelet átadása hatékonyabb memória- és teljesítmény szempontjából, különösen nagy adathalmazok esetén.
Példa:
func processArray(arr [1000]int) {
// az egész tömb másolása
}
func processSlice(s []int) {
// csak a szelet struktúrájának másolása
}
func main() {
var a [1000]int
processArray(a) // költséges
processSlice(a[:]) // hatékony
}