6

次の動作を見つけました。次の多次元配列を作成するとします。

spam = array(runif(96*48*60*360), dim = c(96,48,60,360))

R がこれに使用するメモリの量はかなり予測可能です。つまり、(96*48*60*360) * 4 バイト = 759.4 M バイトです。lsosこれは、関数を使用してうまく確認できます (この投稿を参照):

> lsos()
         Type      Size PrettySize Rows Columns
spam    array 796262520   759.4 Mb   96      48
lsos function       776  776 bytes   NA      NA

ただし、プロセスとしての R はより多くのメモリを使用し、約 2 倍のサイズになります。

$ top | grep rsession
82:17628 hiemstra  20   0 1614m **1.5g** 8996 S  0.3 40.4   0:04.85 rsession  

なぜRはこれを行うのですか?Rがより迅速にアクセスできるようにするために、余分な予約メモリが割り当てられていると思いますか?何かご意見は?

4

1 に答える 1

6

ガベージ コレクタがまだ実行されていないためです。
そのため、おそらく大きな配列の作成中に生成された多くのガベージがあり、これをクリアする必要があります。

関数を呼び出してガベージ コレクションを強制するgc()と、使用されるメモリが配列のサイズにかなり近くなることがわかります。

> memory.size()
[1] 775.96
于 2012-07-26T08:14:54.903 に答える