編譯器

以偵錯器檢視施加了最佳化而編譯的程式時,有時部分變數的值會顯示為「無法顯示」。主要原因為何?

  1. A因為施加最佳化後,偵錯器完全無法載入程式
  2. B因為變數的值每次編譯都會隨機改變
  3. C因為值已因暫存器的重複使用或計算的刪除而不復存在
查看答案與解析

正確答案:C. 因為值已因暫存器的重複使用或計算的刪除而不復存在

在最佳化中,變數不放在記憶體,只用暫存器處理,用完後該暫存器就被重複用於其他的值。也有計算本身因常數傳播而消失的情況。因此,在偵錯器中停下的時間點,該變數的值有可能已不存在於任何地方,而顯示「已被最佳化刪除」等訊息。偵錯時,一般會減弱最佳化,或使用適合偵錯的最佳化設定。並不是偵錯器無法載入。

  • A. 偵錯器也能載入已最佳化的程式。
  • B. 值並不會隨機改變。
  • C. 正確。因為暫存器的重複使用或計算的刪除,值已不存在。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 對上方函式充分進行常數傳播、常數摺疊與無用程式碼刪除後,函式所回傳的值與剩餘的程式碼,下列何者正確?
  2. 關於編譯器詞法分析的作用,下列何者正確?
  3. 關於編譯器的語法分析所進行的工作,下列何者正確?
  4. 下列何者最適合作為編譯器的語意分析所能發現的錯誤範例?
  5. 關於抽象語法樹(AST)的特徵,下列何者正確?

這個領域的比較