[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: size-of instance?



In article <abdfaf8f030210043e7a@[198.112.74.194]>,
bill@cambridge.apple.com (Bill St. Clair) wrote:

> [...] 
> Here's one way:
> 
> (defmacro meter-consing (&body body)
>   (let ((bytes (gensym)))
>     `(let ()              ; LET here forces evaluator to compile whole form
>        (gc)
>        (let ((,bytes (ccl::%freebytes)))
>          (multiple-value-prog1
>            (progn ,@body)
>            (gc)
>            (format t "~&Consed ~d bytes~%" (- ,bytes (ccl::%freebytes))))))))
> 
> ? (meter-consing (cons 1 2))
> Consed 8 bytes
> (1 . 2)
> ? 

Is this code really okay? It gives me weird results (on this Mac LC475 at
least):

? (meter-consing (cons 1 2))
Consed -368 bytes
(1 . 2)
? (let ((result-list nil))
    (dotimes (i 100)
      (setf result-list (cons i result-list)))
    (meter-consing result-list))
Consed 0 bytes
(99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76
75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51
50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26
25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)
? 

Arnoud Verdwaald