C では、変数の前に「&」を配置して、その変数のアドレスを把握できます。私は32ビットマシンを持っています。コンソールに住所を出力すると、コンソールには 7 桁の 10 進数が表示されます。その数字 (10^7) が 32 ビット マシンにどのように関連しているか知りたいだけです。(2^32) ありがとう
3 に答える
おそらく、ポインターまたは 16 進値として出力する必要があります。
printf ("address = %p\n", &variable);
printf ("address = %x\n", &variable);
これにより、最大 8 桁の 16 進数が得られます (32 ビット アドレス空間の場合)。
32 ビットの数値の範囲は00000000
16~FFFFFFFF
16 ( 10 進数では0
~4,294,967,295
) であるため、10 進数で最大 10 桁になる可能性があります。
10 進法で 7 桁の数値しか得られない理由は、変数がアドレス空間の最上部に近くないためです。
最大 32 ビット数、16 進数の 0xFFFFFFFF は 4294967296 (基数 10) に変換されるため、最大 32 ビット数を表示するには 10 桁が必要です。数字が小さいほど使用する桁数が少なくなります (0x1 には 1 のみが必要です)。
変数がメモリ内のどこに配置されるかは、その変数が格納されているストレージの種類 (つまり、スタック データと静的データ) と、実行可能ファイルがそれらのセグメントをメモリにマップする方法に関係しています。
2,500 万個の整数の配列を静的に割り当ててみて、最後のアドレスを取得します。おそらく 100,000,000 に近い数字が表示されるはずです。(ただし、システムのRAMが不足したときに何が起こるかを見たい場合を除き、この流れに夢中にならないでください=)
できるよ
printf("0x%08x", &whatever)
..左側にゼロパディングが埋め込まれた完全な8桁の16進数を取得します。
「0x」の部分は厳密には必要ありませんが、3 週間後にプログラムを再度実行し、たまたま見ている 16 進数に AF 文字が含まれていない場合に、混乱を避けるのに役立ちます。