我在尝试在R中使用大对象时遇到了问题。例如:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
我了解这与获取连续内存块(从此处)的难度有关:
开头的错误消息无法分配大小向量,表明获取内存失败,原因是大小超出了进程的地址空间限制,或者更有可能是因为系统无法提供内存。请注意,在32位版本上,可能有足够的可用内存,但没有足够大的连续地址空间将其映射到其中。
我该如何解决?我的主要困难是我在脚本中到达了某个特定点,R无法为一个对象分配200-300 Mb的内存...我无法真正预分配该块,因为我需要用于其他处理的内存。即使我认真删除不需要的对象,也会发生这种情况。
编辑:是的,抱歉:Windows XP SP3、4Gb RAM,R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Calloc
和Free
记忆,但我怀疑这是不是本杰明在做什么。