いくつかの抽象中間言語にいくつかのプログラムをコンパイルしたとします。プログラムは、次に実行する操作と決定(基本的にはツリー)のシーケンスです。例: アセンブリへのコンパイル時のジャンプ量を最小限にする
a();
if (bla) then c();
else b(); d();
e();
は今、我々はリニアメモリへの「パック」は、このシーケンスを必要とし、そうすることによって、我々のコードは、(条件付きとしない)分岐することがあります。例えば、可能性の1:
CALL A
TEST bla
BRANCH else
CALL C
JMP esc
else: CALL B
CALL D
esc: CALL E
は、これらのブロックを配置する方法についての複数の可能性は、線形メモリ内のコースがあり、それらはすべての支店/ジャンプの量が異なります。私たちの目標はそれらを最小化することです。
質問:
a)この問題をどのように呼びますか?それの一般的な名前はありますか? (BDD構築のインスタンスですか?)
b)ジャンプ/分岐の量が最小限になるようなブロックの配置を見つけると、そのような問題の複雑さは何ですか?