2015-01-20 16 views

Antwort

7

1) ist ein nil slice.

2) und 3) sind Nicht-Nil-Scheiben mit der Länge Null und der Kapazität Null.

Playground example

Keine der Optionen Speicher zuordnen.

Alle Optionen werden häufig in Go-Code verwendet.

Da len, cap und append mit Nil-Scheiben arbeiten, 1) kann oft austauschbar mit 2) und 3) verwendet werden.

+0

Sind Sie sicher, dass 2 und 3 nicht zuordnen? Dies zeigt sich anders (RES oben überprüfen): http://play.golang.org/p/105KU6MsD3 es 244 MB verwendet, aber wenn Sie die for-Schleife auskommentieren, ist es 15 MB. EDIT: vergiss es. runtime.MemStats zeigt die Zuweisung bei make ([] [] int), aber keine Zuordnungen mehr in der Schleife, ich nehme an, dass nicht darauf zugegriffen wird, so dass sie nicht tatsächlich zugewiesen, sondern einfach reserviert ist. – siritinga

+0

Anrufe tätigen [mallocgc] (https://github.com/golang/go/blob/d5e4c4061b019a36ed3ac954c98f6535b7e78189/src/runtime/malloc.go#L45), um das Backing-Array für das Segment zuzuweisen. Mallocgc gibt einen Zeiger auf einen festen Block zurück, wenn Größe == 0 ist. –

Verwandte Themen