編譯器
在暫存器配置中發生「溢出(spill)」時,所產生的程式碼會變成怎樣?
- A將值退避到堆疊與讀回的指令增加,容易變慢
- B暫存器的數量自動增加,所有值都能放入暫存器
- C沒被使用的值被刪除,指令數量變少
查看答案與解析
正確答案:A. 將值退避到堆疊與讀回的指令增加,容易變慢
溢出是指當同時存活的值比暫存器數量還多時,將部分的值放到記憶體(堆疊)中。每次使用該值都需要讀取指令,每次改寫都需要寫入指令,因此指令增加,並因記憶體存取而容易變慢。所以編譯器會把迴圈內等經常使用的值留在暫存器中,挑選不常使用的值來溢出。暫存器的數量由CPU決定而不會增加,這也與刪除不需要的值是不同的事。
- A. 正確。退避與讀回的指令增加,容易變慢。
- B. 暫存器的數量由CPU決定,不會增加。
- C. 刪除不需要的值是另一種最佳化。