変数とは

へんすう

プログラムの中で値を記憶しておくための、名前の付いた入れ物。整数型や実数型などの型を宣言して使い、代入によって値を書き換える。新しい値を代入すると、前の値は失われる。

「変数」は、12分野の78問の練習問題に出てきます(プログラミングの基礎(擬似言語のトレース), リンカ・ローダと実行形式, マルチコアと同期など)。

この用語の分野: プログラミングの基礎(擬似言語のトレース)

変数の練習問題に挑戦

最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由はどれか。

  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は実行中に書き換えられるので、読み取りと書き込みが許された領域になります。

解説の中の「変数」

「変数」が出てくる問題(78問)

  1. 最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由はどれか。
  2. C言語でファイルの外側に「int limit = 100;」と書いたグローバル変数は、一般にどのセクションに置かれるか。
  3. 上のグローバル変数のうち、一般に.bssセクションに置かれるものの組み合わせはどれか。
  4. C言語の関数の中で宣言した、staticの付かない局所変数(自動変数)は、実行中どこに置かれるか。
  5. C言語で、初期値を書かない局所変数とグローバル変数の、使い始めたときの値について正しいものはどれか。
  6. 2つのコアがそれぞれ自分のキャッシュに変数xのコピーを持っている。コア0がxに書き込んだあと、コア1がxを読むときに、キャッシュコヒーレンシの仕組みがなければ起こりうる問題はどれか。
  7. 上のコードは、CAS(&p, 期待値, 新しい値)を使って共有の変数counterを2倍にしている。CASが失敗してループをやり直すのはどのようなときか。
  8. スピンロックで、ロックの変数をいきなりアトミック命令で書き換えようとするのではなく、普段は通常の読み出しで空くのを待ち、空いたと見えたときだけアトミック命令を使う(test-and-test-and-set)理由として正しいものはどれか。
  9. C言語で、スレッド間で受け渡すフラグ変数にvolatileを付けるだけでは、同期として不十分である理由として正しいものはどれか。
  10. 8ビットのマイコンで、タイマ割り込みが32ビットの変数ticksを1ずつ増やし、メイン処理がticksを読んで経過時間を求めている。まれに大きくずれた値が読めてしまう原因として正しいものはどれか。
  11. 3つの変数の値を順に送る次のプログラムを実行した後の a、b、c の値の組はどれか。
  12. 内側の繰返しの初期値が外側の変数 i で決まる次の二重ループを実行した後の c の値はどれか。
  13. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 f を f(9087) として呼び出したときの戻り値はどれか。
  14. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 toBin を toBin(12) として呼び出したときの戻り値はどれか。
  15. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 pow を pow(2, 10) として呼び出したとき、pow が呼ばれる回数(最初の呼出しを含む)はどれか。

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

スタック 配列 引数 再帰 マイコン(マイクロコントローラ) 戻り値 ポインタ キャッシュライン リンカ volatile(型修飾子)

用語集の一覧へ