Iサイズ1024x1024x1024の3次元アレイを割り当てるために、以下の単純な移動のコードを使用しています:Goで16GBのメモリを割り当てる方法は?
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)、最も内側の...とランタイムを()の呼び出しパニックを行います。メモリ不足:
これは、と正常に動作し、使用中の(17179869184)65536バイトのブロックを割り当てることができません低い256グリッド解像度、つまり256³、128³などです。構造体のサイズが4x4バイトなので、グリッド全体には正確に16GBのメモリが必要です。私のマシン(openSUSE 12.1 64bit)には、32 GBのアドレス指定可能な物理的な(つまり仮想ではない)メモリがあります。 Go(weekly.2012-02-22)がこれの半分を割り当てないのはなぜですか?
ああ、ありがとう。どのように私はこれを逃すことができる。確かに物事を説明します:D – metaleap