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