什麼是變數

在程式中用來記住值、附有名稱的容器。宣告整數型、實數型等型別後使用,並以指派改寫其值。指派新的值後,先前的值就會遺失。

日文名稱: 変数

「變數」出現在11領域的73道練習題中(程式設計基礎(虛擬碼追蹤), 連結器與載入器與執行檔格式, 多核心與同步等)。

這個名詞所屬的領域: 程式設計基礎(虛擬碼追蹤)

練習變數的題目

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

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

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

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

在C語言中,寫在檔案外側的全域變數「int limit = 100;」,一般會放在哪個區段?

  1. A.data(有初始值的資料)
  2. B.bss(沒有初始值的資料)
  3. C.text(機器碼)
查看答案與解析

正確答案:A. .data(有初始值的資料)

具有非0初始值的全域變數與靜態變數會放在.data區段,其初始值會儲存在檔案中。載入程式時,這些內容會直接複製到記憶體,因此main開始時limit已經是100。.data在執行中可被改寫,所以是允許讀取與寫入的區域。

解析中的「變數」

出現「變數」的題目(73題)

  1. 以偵錯器檢視施加了最佳化而編譯的程式時,有時部分變數的值會顯示為「無法顯示」。主要原因為何?
  2. 在C語言中,寫在檔案外側的全域變數「int limit = 100;」,一般會放在哪個區段?
  3. 下列全域變數中,一般會放在.bss區段的組合為何?
  4. 在C語言的函式中宣告、未加static的區域變數(自動變數),執行時會放在哪裡?
  5. 在C語言中,關於未寫初始值的區域變數與全域變數,開始使用時的值,下列何者正確?
  6. 兩個核心各自的快取中都有變數x的副本。核心0寫入x之後,核心1讀取x時,若沒有快取一致性(cache coherency)機制,可能發生下列何種問題?
  7. 上方的程式碼使用CAS(&p, 預期值, 新值)將共用變數counter變成2倍。CAS失敗而重做迴圈,是在什麼情況下?
  8. 在自旋鎖中,不直接用原子指令去改寫鎖的變數,而是平時以一般的讀取等待鎖被釋放,只有看到鎖空出來時才使用原子指令(test-and-test-and-set),其理由下列何者正確?
  9. 在C語言中,僅對執行緒之間傳遞的旗標變數加上volatile,仍不足以作為同步,其理由下列何者正確?
  10. 下列程式將3個變數的值依序傳遞。執行後 a、b、c 的值為下列何者?
  11. 下列雙重迴圈中,內層迴圈的初值由外層變數 i 決定。執行後 c 的值為下列何者?
  12. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 f(9087) 呼叫下列函式 f 時,回傳值為下列何者?
  13. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 toBin(12) 呼叫下列函式 toBin 時,回傳值為下列何者?
  14. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 pow(2, 10) 呼叫下列函式 pow 時,pow 被呼叫的次數(含第一次呼叫)為下列何者?
  15. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。下列程式在以遞增順序排好的整數型陣列 data(元素編號從1開始)中,把第一個大於或等於 x 的值的元素編號求到 lo。x 不大於 data 的最後一個元素。程式中的【a】應填入下列何者?

相關名詞

堆疊 陣列 引數 回傳值 連結器(Linker) 遞迴 指標(pointer) 偽共享(False sharing) 返回位址 重定位(Relocation)

前往名詞解釋列表