如何计算常规类型的已分配内存的大小

ali*_*oar 3 r

我需要使用read.table从csv(逗号分隔值)读取的一些数据库,并且我想知道如何为每种类型的变量计算分配的内存的大小.

怎么做 ?

编辑 - 换句话说:从.csv文件读取的一般数据帧的R内存量是多少?

Dav*_*son 7

您可以获取分配给对象的内存量object.size.例如:

x = 1:1000
object.size(x)
# 4040 bytes
Run Code Online (Sandbox Code Playgroud)

此脚本也可能有用 - 它允许您查看或绘制所有当前对象使用的内存量.

在回答你为什么object.size(4)是48字节的问题时,原因是每个数字向量都有一些开销.(在数字中R,数字4不仅仅是其他语言中的整数 - 它是长度为1的数字向量).但这不会影响性能,因为开销不会随着向量的大小而增加.如果你试试:

> object.size(1:100000) / 100000
4.0004 bytes
Run Code Online (Sandbox Code Playgroud)

这表明每个整数本身只需要4个字节(如您所愿).

因此,总结:

  • 对于长度的数字向量,n通常以字节为单位40 + 8 * floor(n / 2).但是,在我的R和OS版本中,只有一个轻微的不连续性,它比你预期的快了168个字节(见下图).除此之外,线性关系成立,甚至达到长度为10000000的向量.

    plot(sapply(1:50, function(n) object.size(1:n)))
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 对于分类变量,您可以看到非常相似的线性趋势,但会有更多的开销(见下文).除了一些轻微的不连续性之外,这种关系非常接近400 + 60 * n.

    plot(sapply(1:100, function(n) object.size(factor(1:n))))
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述