This silly loop conses 128 bytes per iteration.

(defun consalot (max)
  (let ((tally 0))
    (dotimes (iter max tally) (when (oddp iter) (incf tally)))))

(time (consalot 10000))
Evaluation took:
  0.003 seconds of real time
  0.002819 seconds of total run time (0.002803 user, 0.000016 system)
  100.00% CPU
  5,631,138 processor cycles
  1,277,936 bytes consed

It boils down to oddp => logtest => mask-signed-field on general integers being pretty bad.
In addition to making a better definition of mask-signed-field that doesn't do that,
perhaps oddp/evenp should be (logbitp x 0) and (not (logbitp x 0)) instead of logtest ?