【问题标题】:Memory usage of matrix object reported in RStudioRStudio 中报告的矩阵对象的内存使用情况
【发布时间】:2019-11-20 05:34:24
【问题描述】:

假设我有一个 numeric 类型的大型矩阵 x,其中包含 1e4 * 1e4 个元素。

x 应该需要 1e8 * 8/ 1e6 = 800MB 内存(加上一些标头)。 object.size()pryr::object_size() 证实了这一点:

> x <- matrix(NA_real_, nrow = 1e4, ncol = 1e4)
> object.size(x)
800000216 bytes
> pryr::object_size(x)
800 MB

但是,“环境”标签中报告的大小为 762.9MB。

RStudio 如何计算RStudio 的“环境”选项卡中报告的对象的内存使用量,差异来自哪里?

【问题讨论】:

    标签: r memory rstudio profiling


    【解决方案1】:

    RStudio 显示的内存大小与object.size 相同。一个 MB 包含 1024KB,一个 KB 包含 1024B:

    object.size(x)
    # 800000216 bytes
    object.size(x) / 1024 / 1024
    # 762.9 bytes
    

    我尝试查看pryr::object_size 代码,但它是用C 实现的。我查看了source code,看起来字节的计算是这样的:

     double bytes = 0;
      // Big vectors always allocated in 8 byte chunks
      if      (n_bytes > 16) bytes = n_bytes * 8;
      // For small vectors, round to sizes allocated in small vector pool
      else if (n_bytes > 8)  bytes = 128;
      else if (n_bytes > 6)  bytes = 64;
      else if (n_bytes > 4)  bytes = 48;
      else if (n_bytes > 2)  bytes = 32;
      else if (n_bytes > 1)  bytes = 16;
      else if (n_bytes > 0)  bytes = 8;
    
      return bytes;
    }
    

    所以可能这就是为什么您的计算是针对匹配 pryr 的 800MB 的原因。

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 2016-08-29
      • 2010-10-08
      • 2014-07-30
      • 2015-07-02
      • 2018-03-22
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多