我正在测试当前R版本的内存限制是什么。
runtest <- function(size) {
x <- "testme"
while(0<1) {
x <- c(x, x)
size <<- object.size(x) # size of x when fail
}
}
字符串
通过在我的笔记本电脑上的控制台中运行runtest(size)
,我得到以下错误:
> runtest(size)
Error: cannot allocate vector of size 4.0 Gb
In addition: Warning messages:
1: In structure(.Call(C_objectSize, x), class = "object_size") :
Reached total allocation of 7915Mb: see help(memory.size)
2: In structure(.Call(C_objectSize, x), class = "object_size") :
Reached total allocation of 7915Mb: see help(memory.size)
3: In structure(.Call(C_objectSize, x), class = "object_size") :
Reached total allocation of 7915Mb: see help(memory.size)
4: In structure(.Call(C_objectSize, x), class = "object_size") :
Reached total allocation of 7915Mb: see help(memory.size)
> size
2147483736 bytes
>
型
这个大小看起来非常接近人们之前提到的2^31-1限制。所以我尝试在我们升级的桌面上运行相同的代码,内存为128 GB,并将64位版本的快捷方式中的变量设置为最大内存使用量100 GB。这是我得到的新错误:
Error in structure(.Call(C_objectSize, ), class = "object_size"):
long vectors not supported yet: unique.c: 1720
> size
8589934680 bytes
>
型
这个8.5GB的限制与在Windows O/S(特别是Windows 7企业版)中运行有关吗?我认为R帮助文件(http://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory-limits.html)解释了这一点,但我很难理解它在说什么(不是我的专业领域)。
2条答案
按热度按时间jhiyze9q1#
查看size.c和unique.c的源代码,看起来用于改进
object.size
的哈希还不支持长向量:字符串
和
型
因此,是
object.size
令人窒息。如何调用numeric(2^36)
,看看你是否可以创建一个这么大的对象,(应该是64GB)。e3bfsja22#
最近版本的R中的最大向量长度是2^53-1,因为双存储模式的尾数中有53位。矩阵或数组的每个维度的最大范围仍然是2^32- 1。1,因为维度值仍然基于整数存储模式。我以为我可能会从
news()
获得更多信息,但没有获得我想象的那么多。在r-devel邮件列表上有很多关于这个的讨论,如果我需要更多,我会使用r-devel邮件列表的高级搜索:https://www.google.com/advanced_search,将https://stat.ethz.ch/pipermail/r-devel
放在“site”插槽中。字符串
[1]支持长度超过2^31 - 1个元素的向量。这\n适用于原始向量、逻辑向量、整数向量、双精度向量、复数向量和字符向量,以及列表。(字符向量的元素仍\n限于2^31 - 1个字节。)