假設我們已經編譯了一些程序給了一些抽象的中間語言:我們的程序是執行下一個操作(基本上是一棵樹)的一系列操作和決策(分支)。例如:編譯爲程序集時最小化跳轉的數量
a();
if (bla) then c();
else b(); d();
e();
現在我們需要「包裝」該序列我們的線性內存,並通過這樣做,我們的代碼必須分支(有條件,而不是)。舉例來說,可能性之一:
CALL A
TEST bla
BRANCH else
CALL C
JMP esc
else: CALL B
CALL D
esc: CALL E
當然也有關於如何安排線性存儲這些塊的多種可能性,他們都在分行的量不同/跳躍。我們的目標是儘量減少它們。
問題:
a)如何調用這個問題?有一個通用名稱嗎? (這是BDD構建的一個實例嗎?)
b)這種問題的複雜性是什麼(尋找塊的排列使得跳轉/分支的數量最小)?