Насколько велик класс в памяти? - PullRequest
7 голосов
/ 13 сентября 2010

Как узнать, сколько байтов у объекта defclass в Common Lisp?

Ответы [ 2 ]

3 голосов
/ 01 января 2013

В дополнение к ответу Райнера вот ответ для CLISP: макрос EXT:TIMES

(defclass c () ((x) (y) (z)))
(ext:times (make-instance 'c))
                                   Permanent            Temporary
Class                         instances   bytes    instances   bytes
-----                         --------- ---------  --------- ---------
C                                     1        48          0         0
-----                         --------- ---------  --------- ---------
Total                                 1        48          0         0
Real time: 1.4E-5 sec.
Run time: 0.0 sec.
Space: 48 Bytes
#<C #x000333CF2AA0>

Примечание: если вы оцените defclass в приглашении, этоскомпилировано, поэтому times сообщит о некотором пухе в дополнение к c.

3 голосов
/ 13 сентября 2010

Вы не можете сделать это в переносном Common Lisp.

Полезной может быть функция ROOM. ROOM печатает статистику памяти и с аргументом T выводит их подробно. Таким образом, вы можете увидеть разницу до и после создания некоторых экземпляров. Реализации могут иметь определенные функции, но вы должны проверить это с помощью руководства или списка поддержки.

...