0

C / C++ を使用して簡単なプログラムを作成すると、得られるアドレス範囲は? つまり、好きな場所を指すことができます..のように:

void* ptr = (int*)0xFFFFFFFF;

そのポインターは実際にはどこを指していますか? メインメモリの実際のアドレスではなく、プログラムの「カバー」アドレスだと思います。

誰か私にそれを説明できますか?独自の C プログラムを実行したときに (Windows などで) 得られるアドレス範囲は? 必要に応じて、他のプログラムのアドレス範囲に本当にアクセスできますか?

ありがとう!

4

3 に答える 3

4

プログラムは仮想アドレス空間で実行され、ポインタは仮想メモリ内の場所を指します。いいえ、別のプログラムと同じ数値を持つポインターを呼び出して、両方が同じ実際のメモリを指すことを期待することはできません。反対に、それを行うと、プログラムがクラッシュしたり、誤動作したりする可能性があります (ただし、注意してください: これは未定義の動作であるため、何かが起こる可能性があり、プラットフォームに依存します)。

于 2013-08-10T08:08:25.543 に答える