I created a million instances of each (the structure
spoint, and the class
point), with randomized members, and the former took about 50 milliseconds, while the latter took about 100 milliseconds. Without obsessing over absolute numbers (this is a reasonable recent linux box), I believe the takeaway is that you should avoid used heavy CLOS until you really need to.
CL-USER> (defstruct spoint xp yp) SPOINT CL-USER> (time (dotimes (i 1000000) (make-spoint :xp (random 1000000) :yp (random 1000000)))) Evaluation took: 0.054 seconds of real time 0.050000 seconds of total run time (0.050000 user, 0.000000 system) 92.59% CPU 172,978,648 processor cycles 31,981,568 bytes consed CL-USER> (defclass point () ((xp :initarg :xp) (yp :initarg :yp))) #<STANDARD-CLASS POINT> CL-USER> (time (dotimes (i 1000000) (make-instance 'point :xp (random 1000000) :yp (random 1000000)))) Evaluation took: 0.102 seconds of real time 0.100000 seconds of total run time (0.100000 user, 0.000000 system) [ Run times consist of 0.020 seconds GC time, and 0.080 seconds non-GC time. ] 98.04% CPU 16 lambdas converted 324,534,044 processor cycles 64,606,960 bytes consed
Update: These figures are from SBCL, but I tried the same on AllegroCL and got identical results.
Of course the other takeaway is that everything is really really fast.