次のChez Schemeコードを考えてみましょう。
(インポート (chezscheme)) (define (list-enumerate ls val proc) (let loop ((ls ls) (return? #f) (val val)) (if (または (null? ls) 戻る?) 値 (call-with-values (lambda () (proc val (car ls))) (ラムダ (return? val) (ループ (cdr ls) return? val)))))) (define (list-index ls proc) (リスト列挙 ls 0 (ラムダ (i elt) (if (proc elt) (値 #ti) (値 #f (+ i 1)))))) (定義 n 100000) (データの定義 (iota n)) (time (list-index data (lambda (elt) (= elt (- n 1)))))
それを実行します:
~ $ scheme --script ~/scratch/_list-enumerate-allocation-test-chez-a.sps (時間 (リスト インデックス データ ...)) コレクションなし 3 ミリ秒の CPU 経過時間 4 ミリ秒経過リアルタイム 8 バイト割り当て
うわー、8 バイトしか割り当てられていないと報告されています。
--program
の代わりにオプションを使用して、もう一度実行してみましょう--script
。
~ $ スキーム --program ~/scratch/_list-enumerate-allocation-test-chez-a.sps (時間 (リスト インデックス データ ...)) コレクションなし 3 ミリ秒の CPU 経過時間 3 ミリ秒経過リアルタイム 800000 バイトが割り当てられました
ええ、800000 バイトが割り当てられています。
違いは何ですか?
エド