6

我发现了以下行为。假设我创建了以下多维数组:

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

R 应该为此使用多少内存是完全可以预测的,即 (96*48*60*360) * 4 字节 = 759.4 Mbyte。使用该lsos功能很好地确认了这一点(请参阅这篇文章):

> 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 可以更快地访问它?有什么想法吗?

4

1 回答 1

6

因为垃圾收集器还没有运行。
所以有很多垃圾,可能是在创建大数组的过程中产生的,必须清除。

如果您通过调用gc()函数强制进行垃圾收集,您将看到已使用的内存将非常接近数组的大小:

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