19

IBM AIXxlcコンパイラーは、ローカル変数ストレージを初期化するためのコードを生成するフラグを提供します。

      initauto=<hh>
                  Initialialize automatic storage to <hh>. <hh> is a
                  hexadecimal value.  This generates extra code and
                  should only be used for error determination.

MSVCコンパイラはデバッグビルドに対して同様のことを行うと思いますが、この点で私のメモリはかすんでいる可能性があります。

GCCに相当するオプションはありますか?

4

3 に答える 3

10

OK、私が提供できるベストアンサー。

http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.htmlは、省略して「いいえ」と言っています。スタックワイプコードを出力に挿入するためのドキュメントはありません。

私が推測できる限りでは、これが機能する唯一の方法は、自動変数が作成される各埋め込み字句フレームの先頭に、似たmemsetようなコード(おそらくいくつかの操作と同じくらい簡単ですmovが、それでも)を挿入することです。私が知る限り、GCCの内部に関する専門家からはほど遠いですが、そうすることを文書化したものは何もないようです。

さらにこれに続いて、361ページのGCCInternalsのPDFgccint.pdf(http://gcc.gnu.org/onlinedocs/gccint.pdf)は、関数へのエントリ時にフレームポインタ調整呼び出しステップのGCC名を定義します。ですprologue。(ただし、これが関数内の他の字句スコープに適用されるかどうかはわかりません。)これはMachine Definition(md)ファイルで発生するはずなので、そのようなオプションはCPUアーキテクチャーに対して定義する必要があるようです。 。私は彼らのオンラインViewCVS ( http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/prologue )を調べて、i386.mdの11,893行目あたりのコピーを(少なくとも1つ)見つけました。 -the-function-expansion数ホップ、そのような条件付きコードを出力するものは何もないようです。

しかし、このGCCの下にあるものはちょっときちんとしています...

于 2012-05-10T03:32:20.447 に答える
3

明確な参照は見つかりませんが、GCCの特定のコピー(特にGCC Fortranコンパイラ)には、-finit-local-zero明示的に初期化されていないローカル変数または配列を自動的にゼロに設定するオプションがあるようです。

標準のGCCに関する限り、このトピックで私が見つけた唯一の機能は、-Wuninitialized初期化されていない変数に警告をスローすることです(ただし、これはあなたが探しているものではないことはわかっています)。

これはどれほどひどく必要ですか?-finit-local-zero本当に正当な理由がある場合は、コードを自分のバージョンのGCCにコピーするのはそれほど難しいことではないと思います...

于 2012-05-10T03:12:11.960 に答える
-1

C99:自動保存期間を持つオブジェクトが明示的に初期化されていない場合、その値は不確定です。

この質問についてのトピックがありました。Cで宣言された初期化されていない変数はどうなりますか?価値はありますか?

于 2012-05-10T02:40:13.037 に答える