LISP Scheme Part2
■ このスレッドは過去ログ倉庫に格納されています
010799
NGNGんー、cons呼ぶたびにmalloc(sizeof(pair)してちゃ遅す
ぎる(しメモリもムダだ)と思うぞ。mallocはいろんな大き
さ扱うためのオーバーへッドがあるから。
最近の処理系だとこんなじゃないか?
#define SET_TAG(x,tag) ((object *)((unsigned long)(x)+(tag)))
obj *cons(obj *car, obj *cdr)
{
obj *value;
if (heap_ptr + sizeof(pair) > heap_limit) {
gc();
}
value = heap_ptr;
heap_ptr += sizeof(pair);
value->pair.car = car;
value->pair.cdr = cdr;
return SET_TAG(value, CONS_TAG);
}
まあ、コンパイルコードだと、上をインライン展開してあ
るだろうが…
■ このスレッドは過去ログ倉庫に格納されています