[Openmcl-devel] memory

Gary Byers gb at clozure.com
Mon Apr 12 04:45:14 UTC 2010


When people ask questions like this, they usually means something
like "what's the total size of this object, plus the size of all things that
it transitively and uniquely references ?"

Another way of asking that is to ask "if the object in question became 
garbage, how
much memory would be freed by the GC ?"

(let* ((obj (make-instance ...)))
  (gc)
  (let* ((with-obj (%precise-size-of-allocated-memory-at-the-moment)))
    (setq obj nil)
    (gc)
    (let* ((without-obj (%precise-size-of-allocated-memory-at-the-moment)))
      (- with-obj without-obj))))

There's no such function as the one that I'm calling 
%PRECISE-SIZE-OF-ALLOCATED-MEMORY-AT-THE-MOMENT; it's very hard to measure 
this in CCL (because of threads and because of other issues.)  We're also 
assuming that OBJ is the only thing that becomes garbage between the two 
GCs, and we're assuming that that object isn't sitting in some machine 
register even after we set the variable OBJ to NIL.  Neither of those 
assumptions is valid.

I don't want to say that there's no reliable way to answer this question in 
general, but it's much, much harder to answer than it might appear to be at 
first glance.

There are some heap-analysis utilities described at 
<http://trac.clozure.com/ccl/wiki/MemoryUtils> (some of them are currently 
x8664-Linux-specific); none of them try to answer this question, but they 
do try to answer some similar questions.



--On April 11, 2010 4:50:23 PM +0200 Joakim Sandgren 
<joakim at joakimsandgren.com> wrote:

> Hi,
> Are there a way to see how big in Kb  or bytes a clos object is ?
>
>
> sincerely
> joakim
>
>
>
>
>
>
>
>
> Joakim Sandgren
> joakim sandgren musik
> 42, rue de Maubeuge
> 75009 Paris
> France
> +33 (0)1 45 26 43 90
> info at joakimsandgren.com
> http://www.joakimsandgren.com







More information about the Openmcl-devel mailing list