「コンパイラ・スクリプトエンジン」相談室16 (648レス)
「コンパイラ・スクリプトエンジン」相談室16 http://mevius.5ch.net/test/read.cgi/tech/1405822579/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
531: デフォルトの名無しさん [sage] 2016/04/29(金) 10:04:10.82 ID:GdtJdaFL バイトコードのテキストってのが若干意味不明だが バイトコードならアセンブル(バイナリ化)しておかないか普通 a = b + c * d を二分木のASTで (st (ldptr local[0]) (add (ld local[1]) (mul (ld local[2]) (ld local[3])))) みたいに格納して、ポインタ1つあたり64 bits、ノード構造体のサイズが24 bytesと仮定して glibc mallocを使うことを仮定して全部で32 bytes * 7 = 224 bytesのヒープを消費する。 一方でレジスタ型VMを仮定して、簡単の為に1命令32 bits固定長とすると、例えば ldptr r0, local[0] / ld r1, local[1] / ld r2, local[2] / ld r3, local[3] / mul r4, r2, r3 / add r5, r1, r4 / st r0, r5 の7命令で与式が表現できるから、 配列の中身の長さが2^nに拡大されて予約される事を仮定すると4 bytes * 8 = 32 bytes これに配列の管理領域が2ワード16 bytes、 glibc mallocを使うことを仮定すると2箇所の領域の管理で2ワード16 bytes必要で 合計で64 bytesのヒープを消費する。 ただ、配列には配列の問題点と言うかでっかい領域を再確保するのが難しい事があるから 文単位ではリストや木を、式単位では配列を使うってのがインタプリタとしては良いんじゃないかなとは思う。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/531
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.988s*