How to find out array size of an array?
I don't need the length but want to know how much a array takes up in
memory.
Thanks
Tridib
···
--
Posted via http://www.ruby-forum.com/.
How to find out array size of an array?
I don't need the length but want to know how much a array takes up in
memory.
Thanks
Tridib
--
Posted via http://www.ruby-forum.com/.
Including or excluding the memory footprint of the objects in the array? What about objects references by objects in the array, the objects referenced by those objects, and so on?
Also, what Ruby implementation and version are we talking about, and on what platform?
On 08/30/2012 07:10 PM, Tridib Bandopadhyay wrote:
How to find out array size of an array?
I don't need the length but want to know how much a array takes up in
memory.
--
Lars Haugseth
If you use ruby 1.9.2 or later you can try following approach:
require 'objspace'
ObjectSpace.memsize_of(array).tap do |size|
array.each do |el|
size += ObjectSpace.memsize_of(el)
end
end
That you'll give you size of memory taken. But that does not take into account the size of ruby RObject internal struct that is referencing every single ruby object. It's size depends on 32/64 bit platform and packing options. My guess that it's around 128 bytes.
Array less than 4 elements is embedded into RObject and takes no additional size to store(that's not related to array values per se, since they have own RObject instances)
So for instance, you have array a = [1,2,3,4]
The raw store space is 32 bytes(array > 3 overhead) + array RObject size, + RObject size * 4 (number of int elements)
On Aug 30, 2012, at 8:10 PM, Tridib Bandopadhyay wrote:
How to find out array size of an array?
I don't need the length but want to know how much a array takes up in
memory.Thanks
Tridib
--
Posted via http://www.ruby-forum.com/\.
If you use ruby 1.9.2 or later you can try following approach:
require 'objspace'ObjectSpace.memsize_of(array).tap do |size|
array.each do |el|
size += ObjectSpace.memsize_of(el)
end
end
That does not work since tap will return the result of memsize_of(array) only.
irb(main):003:0> 123.tap {|s| s + 999}
=> 123
irb(main):004:0> 123.tap {|s| s += 999}
=> 123
That you'll give you size of memory taken. But that does not take into account the size of ruby RObject internal struct that is referencing every single ruby object. It's size depends on 32/64 bit platform and packing options. My guess that it's around 128 bytes.
It also does not take into account memory taken by all referenced
objects since you descend one level only. You would need a DFS of BFS
to properly account for all levels.
Kind regards
robert
On Fri, Aug 31, 2012 at 2:57 PM, Sigurd <cu9ypd@gmail.com> wrote:
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/