「コンパイラ・スクリプトエンジン」相談室16 (649レス)
上
下
前
次
1-
新
531
(2)
: 2016/04/29(金)10:04
ID:GdtJdaFL(1)
AA×
[240|
320
|
480
|
600
|
原寸
|
JPG
|
べ
|
レス栞
|
レス消
]
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
バイトコードのテキストってのが若干意味不明だが バイトコードならアセンブルバイナリ化しておかないか普通 を二分木ので みたいに格納してポインタつあたり ノード構造体のサイズが と仮定して を使うことを仮定して全部で のヒープを消費する 一方でレジスタ型を仮定して簡単の為に命令 固定長とすると例えば の命令で与式が表現できるから 配列の中身の長さがに拡大されて予約される事を仮定すると これに配列の管理領域がワード を使うことを仮定すると箇所の領域の管理でワード 必要で 合計で のヒープを消費する ただ配列には配列の問題点と言うかでっかい領域を再確保するのが難しい事があるから 文単位ではリストや木を式単位では配列を使うってのがインタプリタとしては良いんじゃないかなとは思う
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 118 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
ぬこの手
ぬこTOP
0.035s