在内存中查找单个对象的大小

Mic*_*gge 10 julia

我知道该whos()函数将给出内存中所有对象的大小.这可能会很慢执行,并且有时会在某些对象上失败,从而使整个函数挂起.有没有办法获得特定对象的内存大小,类似于sys.getsizeof()Python中的函数?

amr*_*ods 17

varinfo()接受正则表达式来匹配对象名称,所以你可以使用类似的东西

x = rand(100, 100)
varinfo(r"x")
Run Code Online (Sandbox Code Playgroud)

获取信息x.对于以字节为单位的大小

Base.summarysize(x)
Run Code Online (Sandbox Code Playgroud)

编辑:最初这个答案是推荐的whos(),但是当@Plankalkül提及whos()已重命名时varinfo(),答案已相应更新.

  • 这在 Julia 1.0 中被重命名为 `varinfo()` (2认同)

Sal*_*apa 6

你可以使用这个sizeof功能:

help?> sizeof
search: sizeof

  sizeof(s::AbstractString)

  The number of bytes in string s.

  sizeof(T)

  Size, in bytes, of the canonical binary representation of the given DataType T, if any.

julia> x = rand(100, 100);

julia> sizeof(x)
80000
Run Code Online (Sandbox Code Playgroud)

  • 这是意料之外的,`x`既不是字符串也不是类型. (2认同)
  • 是意外的确如果只读一个描述,你可以打开一个PR或问题到文档,为了添加这个,如果你想,我现在不能这样做,但会尝试在其他时间这样做,应该相当容易做到. (2认同)
  • 似乎有一些对象类型sizeof不起作用(我之前在提出问题之前尝试过它,但应该在我的文本中提到它).例如,我有一个存储为Data的稀疏矩阵.从那里,我得到了这两个不同的结果:`Base.summarysize(Data)## 483747752`; `sizeof(数据)## 40` (2认同)
  • @aireties`sizeof`给出一个对象的大小,而`summarysize`递归地求和一个对象的大小及其字段.`Data`包含对其字段的一些引用,这些字段不是位类型,因此`sizeof`仅计算指针大小,而不是实际数据大小. (2认同)