我想找出数据类型消耗的内存(以字节为单位)。我在整数上调用了size
方法。由于我运行的是64位机器,因此返回8。
1.size # => 8
类似地,对于字符串和数组,它返回每个字符/整数1个字节。
'a'.size # => 1
['a'].size # => 1
['a', 1].size # => 2
['a', 1]
这样的异构数组返回1 + 8 = 9 bytes
(1表示char,8表示整数)?size
检查分配给ruby数据类型的内存是否正确?答案 0 :(得分:8)
我认为您正在寻找MRI内存使用情况。 Ruby有ObjectSpace
:objspace库扩展了ObjectSpace模块并添加了几个方法来获取有关对象/内存管理的内部统计信息。
您需要'objspace'才能使用此扩展模块。
您将获得以下内容:
> require 'objspace'
=> true
> ObjectSpace.memsize_of(Array)
=> 5096
> ObjectSpace.memsize_of(Hash)
=> 3304
> ObjectSpace.memsize_of(String)
=> 6344
> ObjectSpace.memsize_of(Integer)
=> 1768
注意:强> 通常,如果您不了解MRI实施,不应该使用此库。主要是,该库适用于需要了解MRI内存使用情况的(内存)分析器开发人员和MRI开发人员。
答案 1 :(得分:4)
这两种方法适用于两种不同的数据类型。
在例如1中,您将size
应用于fixnum。这个方法:
Returns the number of bytes in the machine representation of fix.
来源:http://www.ruby-doc.org/core-2.2.0/Fixnum.html#method-i-size
但是,与数组一起使用时,size
是length
的别名。在这里:http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-size。其中:
Returns the number of elements in self. May be zero.
答案 2 :(得分:2)
Array#size
返回Array
的元素数,而不是分配的内存。