編譯器

在暫存器配置中發生「溢出(spill)」時,所產生的程式碼會變成怎樣?

  1. A將值退避到堆疊與讀回的指令增加,容易變慢
  2. B暫存器的數量自動增加,所有值都能放入暫存器
  3. C沒被使用的值被刪除,指令數量變少
查看答案與解析

正確答案:A. 將值退避到堆疊與讀回的指令增加,容易變慢

溢出是指當同時存活的值比暫存器數量還多時,將部分的值放到記憶體(堆疊)中。每次使用該值都需要讀取指令,每次改寫都需要寫入指令,因此指令增加,並因記憶體存取而容易變慢。所以編譯器會把迴圈內等經常使用的值留在暫存器中,挑選不常使用的值來溢出。暫存器的數量由CPU決定而不會增加,這也與刪除不需要的值是不同的事。

  • A. 正確。退避與讀回的指令增加,容易變慢。
  • B. 暫存器的數量由CPU決定,不會增加。
  • C. 刪除不需要的值是另一種最佳化。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 編譯器的指令排程,其主要目的為何?
  2. 對上方函式最後的遞迴呼叫進行尾端呼叫最佳化,會有什麼效果?
  3. 關於編譯器與直譯器的差異,下列何者正確?
  4. 關於使用JIT編譯的執行環境之特徵,下列何者正確?
  5. 關於LLVM的基本架構,下列何者正確?

這個領域的比較