# Object's allocated memory

**URL:** <https://www.ruby-forum.com/t/objects-allocated-memory/115309>\
**Category:** Ruby\
**Created:** [September 23, 2007, 6:15pm UTC](https://www.ruby-forum.com/t/objects-allocated-memory/115309 "2007-09-23T18:15:42Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![underbluewaters](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/5daacb/32.png) [@underbluewaters](https://www.ruby-forum.com/u/underbluewaters)\
**Post date:** [September 23, 2007, 6:15pm UTC](https://www.ruby-forum.com/t/objects-allocated-memory/115309/1 "2007-09-23T18:15:42Z")

</div>

I have an application where I need to sort objects based on their  
memory footprint. What is the easiest way to get this information  
from Ruby1.6 ? I have no problem with having to call some C functions  
to get this info.

The hack Marshal.dump(foo).size() would work, but since this might be  
called often I need an elegant solution.

---

<div class="post-metadata">

**Author:** ![underbluewaters](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/5daacb/32.png) [@underbluewaters](https://www.ruby-forum.com/u/underbluewaters)\
**Post date:** [September 23, 2007, 8:26pm UTC](https://www.ruby-forum.com/t/objects-allocated-memory/115309/2 "2007-09-23T20:26:55Z")

</div>

removed\_email\_address@domain.invalid wrote:

> I have an application where I need to sort objects based on their  
> memory footprint. What is the easiest way to get this information  
> from Ruby1.6 ? I have no problem with having to call some C functions  
> to get this info.
> 
> The hack Marshal.dump(foo).size() would work, but since this might be  
> called often I need an elegant solution.

Hmmm…tricky. Seems like you’d want a #footprint method in every class  
that accumlated the memory footprint of the object. That method would be  
written in C so it could account for the sizes of the C structure  
(RString, RArray, etc.) that represents the object. You’ll have to make  
some rules about collections. Does the footprint of an array include the  
footprints of the object in the array, or just the container? Same for  
Hash, etc. Then there’s going to be some objects for which you just  
can’t get an accurate count. I suspect it would be hard to find out how  
much memory is allocated to buffers for an open file, for example (if  
that matters). And I know for a fact that you can’t find out how much  
memory is allocated to one of RMagick’s Magick::Image objects. Even the  
Marshal hack wouldn’t work there since the on-disk size doesn’t have to  
match the in-memory size. Of course your application may not use such  
objects, but they exist.

---

<div class="post-metadata">

**Author:** ![underbluewaters](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/5daacb/32.png) [@underbluewaters](https://www.ruby-forum.com/u/underbluewaters)\
**Post date:** [September 23, 2007, 9:38pm UTC](https://www.ruby-forum.com/t/objects-allocated-memory/115309/3 "2007-09-23T21:38:14Z")

</div>

Quoth removed\_email\_address@domain.invalid:

> I have an application where I need to sort objects based on their  
> memory footprint. What is the easiest way to get this information  
> from Ruby1.6 ? I have no problem with having to call some C functions  
> to get this info.
> 
> The hack Marshal.dump(foo).size() would work, but since this might be  
> called often I need an elegant solution.

You also might want to fix your Ruby1.6 problem. 1.8.6 has been out for  
a  
while.

---

<div class="post-metadata">

**Author:** ![underbluewaters](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/5daacb/32.png) [@underbluewaters](https://www.ruby-forum.com/u/underbluewaters)\
**Post date:** [October 3, 2007, 9:55am UTC](https://www.ruby-forum.com/t/objects-allocated-memory/115309/4 "2007-10-03T09:55:32Z")

</div>

On 24.09.2007 04:16, Eric H. wrote:

> Look at the mem\_inspect gem. It has hooks into the GC for Ruby 1.8.
> 
> Marshal.dump(foo).size will include all the memory an object references,  
> including the object’s instance variables & etc. The Array [‘x’\*1024]  
> takes up only a few bytes of memory, but Marshal.dump.size says 1032 bytes.

And that’s the problem with all those memory inspection issues:  
virtually no automated algorithm (that I know of) can automatically  
decide which part of the object graph is supposed to be counted as  
belonging to another object. And then there’s still aliasing effects,  
i.e. objects can be referenced by any number of other objects.

OP, what problem are you trying to solve?

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![underbluewaters](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/5daacb/32.png) [@underbluewaters](https://www.ruby-forum.com/u/underbluewaters)\
**Post date:** [September 24, 2007, 4:17am UTC](https://www.ruby-forum.com/t/objects-allocated-memory/115309/5 "2007-09-24T04:17:33Z")

</div>

On Sep 23, 2007, at 09:15, removed\_email\_address@domain.invalid wrote:

> I have an application where I need to sort objects based on their  
> memory footprint. What is the easiest way to get this information  
> from Ruby1.6 ? I have no problem with having to call some C functions  
> to get this info.
> 
> The hack Marshal.dump(foo).size() would work, but since this might be  
> called often I need an elegant solution.

Look at the mem\_inspect gem. It has hooks into the GC for Ruby 1.8.

Marshal.dump(foo).size will include all the memory an object  
references, including the object’s instance variables & etc. The  
Array [‘x’\*1024] takes up only a few bytes of memory, but  
Marshal.dump.size says 1032 bytes.
