たとえば、グローバル変数はメモリ内の特定の場所に配置されるだけだと授業で聞きました。2 つのプログラムが誤って同じメモリ位置を異なる変数に使用するのを防ぐにはどうすればよいですか?
また、両方のプログラムが引数とローカル変数に同じスタックを使用していますか? もしそうなら、変数が互いにインターリーブしてインデックスを台無しにするのを防ぐにはどうすればよいですか?
ちょっと興味があるんだけど。
たとえば、グローバル変数はメモリ内の特定の場所に配置されるだけだと授業で聞きました。2 つのプログラムが誤って同じメモリ位置を異なる変数に使用するのを防ぐにはどうすればよいですか?
また、両方のプログラムが引数とローカル変数に同じスタックを使用していますか? もしそうなら、変数が互いにインターリーブしてインデックスを台無しにするのを防ぐにはどうすればよいですか?
ちょっと興味があるんだけど。
これは、最新のオペレーティング システムが各プロセスを個別の仮想アドレス空間にロードすることによって行うことです。複数のプロセスが同じ仮想アドレスを参照する場合がありますが、オペレーティング システムは、最新のハードウェアの助けを借りて、各プロセスを個別の物理アドレスにマップし、1 つのプロセスが別のプロセスに割り当てられた物理メモリにアクセスできないようにします1。
あなたの質問に対する簡単な答えは、オペレーティング システムがこれらの問題を処理するということです。これらは非常に深刻な問題であり、オペレーティング システムのジョブのかなりの部分が、すべてを別のスペースに保持しています。オペレーティング システムは、他のすべてのプログラムを追跡し、それぞれがスペースを使用していることを確認するプログラムを実行します。これにより、スタックも分離されます。各プログラムは、OS によって割り当てられた独自のスタックを実行しています。OS がこの割り当てを行う方法は、実際には複雑な作業です。