Verständnis von Gedächtnislecks in go Slice
Bei der Arbeit mit Scheiben in go ist es wichtig, das Potenzial für Erinnerungspflicht zu verstehen, insbesondere wenn Zeiger beteiligt sind. Zeiger auf Ganzzahlen ([]*int):
s: = []*int {new (int), new (int)} Dieses Stück hat ein Backing-Array mit einer Länge von 2 und enthält 2 Nicht-Nil-Zeiger, die auf zugewiesene Intupers außerhalb des Arrays auftreten. IT:
s = s [: 1]
s := []*int{new(int), new(int)}
schneiden es wird einfach die Elemente vor dem neuen Slice verbergen, aber sie bleiben im Backing -Array. Im Gegensatz zu Zeigern sind diese Elemente Teil des Arrays selbst und verweisen nicht auf eine externe Erinnerung.
Hinweise und Strukturen
s = s[:1]
Wenn ein Slice Strukturen enthält, die Hinweise enthalten, Memory -Lecks können vorkommen:
Typen Strukturen {{{{{{{{{{{{{{{{ Titelzeichenfolge Autorenzeichenfolge } ... var bkSlice = [] books {book1, book2} bkSlice = bkSlice [: 1] Obwohl die Slice nur Buch 1 behält, sind die Autor- und Titelzeichenfolgen von Buch2 immer noch im Speicher des Arrays. Um dies zu verhindern, weisen Sie den Nullwert dem Buch2 vor dem Schneiden zu:
bkSlice [1] = Buch {} bkSlice = bkSlice [: 1]
t := []int{1, 2}
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3