ich den folgenden einfachen Go Code bin mit einem 3D-Array der Größe 1024x1024x1024 zuzuordnen:Wie Zuweisen von 16 GB Speicher in Go?
grid = make([][][]TColor, 1024)
for x = 0; x < 1024; x++ {
grid[x] = make([][]TColor, 1024)
for y = 0; y < 1024; y++ {
grid[x][y] = make([]TColor, 1024)
}
}
Die TColor Struktur ist ein 4-Komponenten-float64 Vektor:
type TColor struct { R, G, B, A float64 }
Halfway (x = 477 und y = ~ 600ish) durch die Zuweisung, das am weitesten innen machen() -Aufruf panics mit ... Laufzeit: aus der Erinnerung: nicht vergeben 65536-Byte-Block (17179869184 im Einsatz)
Dies funktioniert gut mit niedrig Grid-Auflösungen, dh 256³, 128³ usw. Da die Größe der Struktur 4x4 Bytes beträgt, sollte das gesamte Raster genau 16 GB Speicher benötigen. Meine Maschine (openSuse 12.1 64bit) hat 32 GB adressierbaren physischen (dh nicht virtuellen) Speicher. Warum kann Go (weekly.2012-02-22) nicht einmal die Hälfte davon zuweisen?
Ah, danke dafür. Wie könnte ich das vermissen? In der Tat, das erklärt Dinge: D – metaleap