【入門】CommonLispその2【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0032デフォルトの名無しさん
2006/02/17(金) 11:11:26この場合非破壊的変更だから、sum を変更する際はヒープに float 領域を
割り当て、そのポインタを sum が指すようコンパイルされる。
一方、マクロを使って
(defun foo1 (array positions)
(declare (type (simple-array single-float (*)) array))
(let ((sum 0.0))
(declare (type single-float sum))
(dotimes (i (length positions) sum)
(setq sum (+ sum (aref array (aref positions i)))))))
のようにすれば、(コンパイラにもよるけど) sum をレジスタに割り当てる
ことができるので、変更する度にヒープを使うことはなくなる。
詳しくは disassemble してみよう。
■ このスレッドは過去ログ倉庫に格納されています