編譯器

作為暫存器配置的準備而進行的存活區間(liveness)分析,所求的是下列何者?

  1. A在整個程式中,各變數被宣告所在的行號
  2. B變數值的最大值與最小值
  3. C在各個時間點,該值之後是否仍有可能被使用
查看答案與解析

正確答案:C. 在各個時間點,該值之後是否仍有可能被使用

存活區間分析會沿著控制流程圖,求出在程式的各個時間點,某個值往後是否有可能被讀取(存活)。存活的值需要保留在暫存器中,而不再被使用的值所佔用的暫存器則可以讓給其他值使用。同時存活的值彼此不能放入同一個暫存器,所以會從這個結果建立干涉圖。這不是求宣告位置或值的範圍的分析。

  • A. 調查的不是宣告的位置,而是被使用的可能性。
  • B. 與求值範圍的分析是不同的。
  • C. 正確。求出在各時間點該值是否仍會被使用。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 某函式中,同時存活的值之數量在最多的地方是5個。在干涉圖除了這5個之外不產生其他限制的單純情況下,要讓所有值不溢出就放入暫存器,暫存器至少需要幾個?
  2. 將重複100次的迴圈,改寫成將主體並排4次份的迴圈展開,次數的判斷與分支會變成幾次?(假設100可被4整除)
  3. 從C語言的程式到產生執行檔的一般流程,下列何者正確?
  4. 透過小視窗檢視所產生機器碼的一小段序列,並將無用的指令組合替換為更好的指令,這種最佳化稱為什麼?
  5. 在上方程式碼中,將 sq 行內展開之後接著生效的最佳化,以及其結果,下列何者正確?

這個領域的比較