<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  
</head>
<body text="#000000" bgcolor="#ffffff">
<br>
Gary Byers wrote:
<blockquote type="cite" cite="mid:32E69CD09BEB7E872203D886@antinomial.abq.clozure.com">
  <pre wrap="">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 ?"
  </pre>
</blockquote>
I'm not sure it's exactly that.  Suppose you have a hash<br>
table with two elements, A and B. A is only reachable through<br>
the hash table; B is reachable in other ways.<br>
<br>
If there were a size-of-this-object function applied to the hash table,<br>
I don't think you'd want it to include A, even though A would become<br>
garbage if the hash table became garbage.<br>
<br>
But I agree with your fundamental point.  If someone asks<br>
"what is the size of this object", "object" can mean more<br>
than one thing depending on the level of abstraction.<br>
In the case of a hash table, probably the caller "means"<br>
to include all the pieces that make up a hash table,<br>
which might be many "objects" in the low-level sense,<br>
since hash tables can be implemented as data structures<br>
with many low-level objects.<br>
<br>
Lisp could know about hash tables specially, but<br>
what if the user, or library being used by the user,<br>
has objects in the high-level sense?  They'd have<br>
to provide some kind of method to say "here's how<br>
to measure my size" that would say which references<br>
to follow and where to stop following references.<br>
<br>
-- Dan<br>
<br>
<blockquote type="cite" cite="mid:32E69CD09BEB7E872203D886@antinomial.abq.clozure.com">
  <pre wrap="">
(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 
<a href="http://trac.clozure.com/ccl/wiki/MemoryUtils" class="moz-txt-link-rfc2396E"><http://trac.clozure.com/ccl/wiki/MemoryUtils></a> (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 
<a href="mailto:joakim@joakimsandgren.com" class="moz-txt-link-rfc2396E"><joakim@joakimsandgren.com></a> wrote:

  </pre>
  <blockquote type="cite">
    <pre wrap="">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
<a href="mailto:info@joakimsandgren.com" class="moz-txt-link-abbreviated">info@joakimsandgren.com</a>
<a href="http://www.joakimsandgren.com" class="moz-txt-link-freetext">http://www.joakimsandgren.com</a>
    </pre>
  </blockquote>
  <pre wrap=""><!---->



_______________________________________________
Openmcl-devel mailing list
<a href="mailto:Openmcl-devel@clozure.com" class="moz-txt-link-abbreviated">Openmcl-devel@clozure.com</a>
<a href="http://clozure.com/mailman/listinfo/openmcl-devel" class="moz-txt-link-freetext">http://clozure.com/mailman/listinfo/openmcl-devel</a>
  </pre>
</blockquote>
</body>
</html>