[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Avoiding consing when translating numbers to strings
Date: Thu, 2 Mar 89 10:06 CST
From: ai.gooch@MCC.COM (William D. Gooch)
FYI - you might want to try the following approach:
(defparameter *temp-string*
(make-array 10 :element-type 'string-char :fill-pointer 0))
(defun examine-number (num)
;; 1Protect the global parameter - format can set its first argument
0 (let ((outstr *temp-string*))
(setf (fill-pointer outstr) 0)
(format outstr "~F" num)
;; 1then deal with the string (in outstr)
0 ))
This won't get you away from the bignum consing Barry mentioned, but it avoids
the need to stack-allocate a new string each time, minimizing the overhead of
building the strings. Probably will speed things up a bit. You have to be
careful because of format's modifying the global's contents in place. I like
to use this approach for short-lived things such as mouse documentation strings.
The problem with this approach is that it is not reentrant.
Remember, the Symbolics system DOES have multiple processes,
and c-m-Suspend, etc. A better way to accomplish the same
thing is to make a temp-string resource.