編譯器

某函式中,同時存活的值之數量在最多的地方是5個。在干涉圖除了這5個之外不產生其他限制的單純情況下,要讓所有值不溢出就放入暫存器,暫存器至少需要幾個?

  1. A5個
  2. B4個
  3. C10個
查看答案與解析

正確答案:A. 5個

同時存活的5個值彼此全部互相干涉,所以在干涉圖中,5個節點全部以邊相連(完全圖),著色至少需要5種顏色。像線性的程式碼那樣,存活區間可以用區間表示的單純情況,可以用與同時存活值的最大數量相同數目的顏色著色,所以5個暫存器就夠了。若只有4個,就必須在某處把一個值退避到記憶體,也就是溢出。10個則比所需的數量多出許多。

  • A. 正確。需要與同時存活的最大數量相同的5個,而且在此情況下已足夠。
  • B. 只有4個的話,某處就需要溢出。
  • C. 10個比所需的數量還多。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 將重複100次的迴圈,改寫成將主體並排4次份的迴圈展開,次數的判斷與分支會變成幾次?(假設100可被4整除)
  2. 從C語言的程式到產生執行檔的一般流程,下列何者正確?
  3. 透過小視窗檢視所產生機器碼的一小段序列,並將無用的指令組合替換為更好的指令,這種最佳化稱為什麼?
  4. 在上方程式碼中,將 sq 行內展開之後接著生效的最佳化,以及其結果,下列何者正確?
  5. 關於軟體管線化(software pipelining)的說明,下列何者正確?

這個領域的比較