次の単純な Go コードを使用して、サイズ 1024x1024x1024 の 3D 配列を割り当てています。
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)
}
}
その TColor 構造体は、4 成分の float64 ベクトルです。
type TColor struct { R, G, B, A float64 }
割り当ての途中 (x=477 および y=~600ish) で、最も内側の make() 呼び出しでパニックが発生します...
これは、256³、128³ などの低いグリッド解像度でも問題なく動作します。構造体のサイズは 4x4 バイトであるため、グリッド全体でちょうど 16 GB のメモリが必要になります。私のマシン (openSuse 12.1 64 ビット) には、32 GB のアドレス指定可能な物理 (つまり、非仮想) メモリがあります。Go (weekly.2012-02-22) がこの半分も割り当てられないのはなぜですか?