Aşağıdaki davranışı tespit ettim. Aşağıdaki çok boyutlu bir dizi yaratmak ki:R'nin ayrılmış belleği, ayrılmış bir dizinin iki katı büyüklüğündedir
spam = array(runif(96*48*60*360), dim = c(96,48,60,360))
Bu kadar bellek R, yani bunun için nasıl kullanılacağı tahmin edilebilir (96 * 48 * 60 * 360) * 4 bayt = 759.4 Mbit. Bu güzel (this post bakınız) lsos
fonksiyonu kullanılarak teyit edilir:
> lsos()
Type Size PrettySize Rows Columns
spam array 796262520 759.4 Mb 96 48
lsos function 776 776 bytes NA NA
R Ancak sürecin kabaca iki katı büyüklükte çok daha fazla bellek kullanır:
$ top | grep rsession
82:17628 hiemstra 20 0 1614m **1.5g** 8996 S 0.3 40.4 0:04.85 rsession
Neden R bu işe yarar? R için daha hızlı erişilebilir hale getirmek için ekstra ayrılmış bellek ayrılmıştır? Düşüncesi olan var mı?
ama oluşturma sırasında daha fazla kullanır? Dizi belleğe sığarsa bu talihsiz olabilir, ancak oluşturma sırasında bellek kullanımındaki artış, kullanılabilir bellek miktarından daha fazla kullanır. –
Peki, kaputun altında ne olduğunu tam olarak bilmiyorum, ancak kodunuzla sadece bir dizi ayırmıyorsunuz; Aslında, önce rasgele sayıların bir vektörünü oluşturursunuz, o zaman bu değerleri kopyalayarak bir dizi ayırırsınız. Öyleyse, sanırım yükün çoğunun (yani çöpün) bu fırlatan vektörün sebebi ... – digEmAll
Ancak, sanırım çöp toplayıcınız hafıza dışındayken otomatik olarak tetikleniyor, bu yüzden performans olacağını düşünmüyorum. dizi belleğe sığdığı sürece sorunları ... – digEmAll