6
次のような現象が見られました。私は、次の多次元配列を作成言う:Rの予約メモリは、割り当てられた配列の2倍です。
spam = array(runif(96*48*60*360), dim = c(96,48,60,360))
それは多くのメモリをR、すなわち、このために使用する方法を非常に予測可能である(96 * 48 * 60 * 360)* 4バイト= 759.4バイト。プロセスは、しかし、多くのメモリを使用して、約2倍の大きさ
> lsos()
Type Size PrettySize Rows Columns
spam array 796262520 759.4 Mb 96 48
lsos function 776 776 bytes NA NA
R:
$ top | grep rsession
82:17628 hiemstra 20 0 1614m **1.5g** 8996 S 0.3 40.4 0:04.85 rsession
はなぜRはこれを行うんこれはうまくlsos
機能(this postを参照)を用いて確認されましたか?私は余分な予約されたメモリは、より迅速にRにアクセスできるように割り当てられていると思いますか?何かご意見は?
だから、最終的には、配列は759.4メガバイトを使用していますが、創造の間にそれはより多くを使用するか?配列がメモリに収まる場合は不幸なことですが、作成時のメモリ使用量の急上昇は使用可能なメモリ量を超えて使用されます。 –
まあ、私はフードの中で何が起こるのか正確にはわかりませんが、あなたのコードでは単純に配列を割り当てているわけではありません。実際には、まず乱数のベクトルを生成し、その値をコピーして配列を割り当てます。だから、私はオーバーヘッド(すなわちゴミ)のほとんどがその使い捨てのベクトルに起因すると思います... – digEmAll
しかし、私はガベージコレクタがメモリ不足時に自動的にトリガすると思いますので、配列がメモリに収まる限り発行します... – digEmAll