2
int p;
int i1;
int i2;
i1 = 1 << 16;
i2 = 1 << 8;
p = int(&i1)+3;

cout << hex;
cout << "&i1: " << int(&i1) << endl;
cout << "&i2: " << int(&i2) << endl;
for(int i = 0; i < 16; i++)
  cout << p << ": " << uint(*((byte*)p--)) << endl;

出力:

&i1: 12fac8
&i2: 12fabc
12facb: 0
12faca: 1
12fac9: 0
12fac8: 0
12fac7: cc
12fac6: cc
12fac5: cc
12fac4: cc
12fac3: cc
12fac2: cc
12fac1: cc
12fac0: cc
12fabf: 0
12fabe: 0
12fabd: 1
12fabc: 0

Visual Studio 2010を使用して、Windows 7 32ビットを実行しています。他に言うことはあまりありませんが、stackoverflowでは「詳細」がないと投稿できないため、これは無駄なとりとめです:)

4

3 に答える 3

1

パディングまたは未使用の一時変数です。デバッグ ビルドを使用する MSVC では、コンパイラはすべての変数を0xccバイトで埋めるコードを生成します。これは、未使用の変数を特定するのに役立ちます - の選択はccランダムな選択ではありません。OS から取得するのはほとんど不可能なアドレスであり、int 3命令でもあるため、そのコードを実行する方法を突然見つけた場合に役立ちます。 (たとえば、データ内のどこかへの関数ポインター)、コードはその場で停止します。いくつかの「ランナウェイ コード」の問題をデバッグした結果、これは非常に便利な機能であることがわかりました。

それがかなり高い(または負の)数であるという事実も有益です。なぜなら、それがゼロだった場合にたとえば、配列への有効なインデックス。

于 2013-05-01T07:56:09.963 に答える