什麼是變數
在程式中用來記住值、附有名稱的容器。宣告整數型、實數型等型別後使用,並以指派改寫其值。指派新的值後,先前的值就會遺失。
日文名稱: 変数
「變數」出現在11領域的73道練習題中(程式設計基礎(虛擬碼追蹤), 連結器與載入器與執行檔格式, 多核心與同步等)。
這個名詞所屬的領域: 程式設計基礎(虛擬碼追蹤)
在程式中用來記住值、附有名稱的容器。宣告整數型、實數型等型別後使用,並以指派改寫其值。指派新的值後,先前的值就會遺失。
日文名稱: 変数
「變數」出現在11領域的73道練習題中(程式設計基礎(虛擬碼追蹤), 連結器與載入器與執行檔格式, 多核心與同步等)。
這個名詞所屬的領域: 程式設計基礎(虛擬碼追蹤)
正確答案:C. 因為值已因暫存器的重複使用或計算的刪除而不復存在
在最佳化中,變數不放在記憶體,只用暫存器處理,用完後該暫存器就被重複用於其他的值。也有計算本身因常數傳播而消失的情況。因此,在偵錯器中停下的時間點,該變數的值有可能已不存在於任何地方,而顯示「已被最佳化刪除」等訊息。偵錯時,一般會減弱最佳化,或使用適合偵錯的最佳化設定。並不是偵錯器無法載入。
正確答案:A. .data(有初始值的資料)
具有非0初始值的全域變數與靜態變數會放在.data區段,其初始值會儲存在檔案中。載入程式時,這些內容會直接複製到記憶體,因此main開始時limit已經是100。.data在執行中可被改寫,所以是允許讀取與寫入的區域。
在最佳化中,變數不放在記憶體,只用暫存器處理,用完後該暫存器就被重複用於其他的值。
以偵錯器檢視施加了最佳化而編譯的程式時,有時部分變數的值會顯示為「無法顯示」。主要原因為何?具有非0初始值的全域變數與靜態變數會放在.data區段,其初始值會儲存在檔案中。
在C語言中,寫在檔案外側的全域變數「int limit = 100;」,一般會放在哪個區段?區域變數是在函式被呼叫時於堆疊框(stack frame)中建立的(經最佳化後也可能只放在暫存器中),函式返回後就會消失。
在C語言的函式中宣告、未加static的區域變數(自動變數),執行時會放在哪裡?全域變數與靜態變數放在.bss,程式開始時會以0填滿,所以從0開始。
在C語言中,關於未寫初始值的區域變數與全域變數,開始使用時的值,下列何者正確?volatile是指示編譯器不要省略或合併變數的讀寫,原本是為了硬體暫存器的操作而設計的。
在C語言中,僅對執行緒之間傳遞的旗標變數加上volatile,仍不足以作為同步,其理由下列何者正確?堆疊 陣列 引數 回傳值 連結器(Linker) 遞迴 指標(pointer) 偽共享(False sharing) 返回位址 重定位(Relocation)