変数とは
へんすう
プログラムの中で値を記憶しておくための、名前の付いた入れ物。整数型や実数型などの型を宣言して使い、代入によって値を書き換える。新しい値を代入すると、前の値は失われる。
「変数」は、12分野の78問の練習問題に出てきます(プログラミングの基礎(擬似言語のトレース), リンカ・ローダと実行形式, マルチコアと同期など)。
この用語の分野: プログラミングの基礎(擬似言語のトレース)
へんすう
プログラムの中で値を記憶しておくための、名前の付いた入れ物。整数型や実数型などの型を宣言して使い、代入によって値を書き換える。新しい値を代入すると、前の値は失われる。
「変数」は、12分野の78問の練習問題に出てきます(プログラミングの基礎(擬似言語のトレース), リンカ・ローダと実行形式, マルチコアと同期など)。
この用語の分野: プログラミングの基礎(擬似言語のトレース)
正解:C. 値がレジスタの使い回しや計算の削除で残っていないから
最適化では、変数をメモリに置かずにレジスタだけで扱い、使い終わったらそのレジスタを別の値に使い回します。定数伝播で計算そのものが消えることもあります。そのため、デバッガで止めた時点ではもうその変数の値がどこにも残っていない場合があり、「最適化で削除された」などと表示されます。デバッグのときは最適化を弱めるか、デバッグ向けの最適化の設定を使うのが一般的です。デバッガが読み込めなくなるわけではありません。
正解:A. .data(初期値のあるデータ)
0以外の初期値を持つグローバル変数や静的変数は.dataセクションに置かれ、その初期値がファイルの中に保存されます。プログラムを読み込むとき、この内容がそのままメモリに写されるので、mainが始まる時点でlimitは100になっています。.dataは実行中に書き換えられるので、読み取りと書き込みが許された領域になります。
最適化では、変数をメモリに置かずにレジスタだけで扱い、使い終わったらそのレジスタを別の値に使い回します。
最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由…0以外の初期値を持つグローバル変数や静的変数は.dataセクションに置かれ、その初期値がファイルの中に保存されます。
C言語でファイルの外側に「int limit = 100;」と書いたグローバル変数は、一般にどのセクションに置かれるか。局所変数は、関数が呼ばれたときにスタックフレームの中に作られ(最適化でレジスタだけに置かれることもあります)、関数から戻ると消えます。
C言語の関数の中で宣言した、staticの付かない局所変数(自動変数)は、実行中どこに置かれるか。グローバル変数や静的変数は.bssに置かれ、プログラムの開始時に0で埋められるので0から始まります。
C言語で、初期値を書かない局所変数とグローバル変数の、使い始めたときの値について正しいものはどれか。volatileは、変数の読み書きを省いたりまとめたりしないようコンパイラに指示するもので、もともとはハードウェアのレジスタの操作のためのものです。
C言語で、スレッド間で受け渡すフラグ変数にvolatileを付けるだけでは、同期として不十分である理由として正しいもの…Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。
スタック 配列 引数 再帰 マイコン(マイクロコントローラ) 戻り値 ポインタ キャッシュライン リンカ volatile(型修飾子)