6
我發現了以下行爲。說我創建以下多維數組:R的預留內存是分配數組大小的兩倍
spam = array(runif(96*48*60*360), dim = c(96,48,60,360))
這是相當可預測的多內存r應該如何使用這一點,即(96 * 48 * 60 * 360)* 4個字節= 759.4兆字節。這是使用lsos
功能很好的證實(見this post):
> 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請勿呢?我假設分配額外的保留內存以使其更快地被R訪問?有什麼想法嗎?
所以在陣列使用759.4兆字節結束,但在創作過程中它使用更多?如果陣列適合內存,這可能是不幸的,但是在創建過程中內存使用率的高峯使用超過可用內存量。 – 2012-07-26 08:44:59
嗯,我不知道到底發生了什麼,但是用你的代碼你不是簡單地分配一個數組;實際上,首先生成一個隨機數的向量,然後通過複製該值來分配數組。所以,我想大部分的開銷(即垃圾)是由於一次性矢量... – digEmAll 2012-07-26 08:52:05
但是,我猜垃圾收集器會在內存不足時自動觸發,所以我不認爲這會是性能只要數組適合內存,就會出現問題... – digEmAll 2012-07-26 08:55:00