0

スタックが常に下向きに成長し、ヒープが上向きに成長することは常に起こりますか?
もしそうなら、OSはどのようにしてヒープ領域をスタックの干渉から保護しますか?その逆も同様です。
そうでない場合、どのような要因がそれに影響しますか?OSバージョン?コンパイラ?他に何か??

4

1 に答える 1

1

はい、これは通常の場合です。これの実装の詳細はOSによって管理され、大きく異なります。非常に簡単な例を示すために、スタックがメモリ内の上位アドレスで開始するのに対し、ヒープは下位アドレスで開始するとします。ヒープの最上部とスタックの最上部を追跡し、ヒープにさらに多くのデータを配置し、スタックにさらに多くのデータを配置すると、スタックが下向きに成長し、ヒープが上向きになるため、最終的にはそれらの中間のどこかで出会うことになります。これが発生するとメモリがなくなるため、追跡する必要があるのは、これら2つが衝突したときだけです。

実際のオペレーティングシステムの場合、これは多くの場合、これほど単純ではありません。各プロセスには独自のスタックがあり、一部には独自のヒープがあり、実際の物理的な配置がどこにでもある仮想メモリアドレスに取り組んでいる可能性があります。各ヒープとスタックには、各プロセスが利用できるメモリの最大量の境界を形成するアドレスと制限が与えられていると想定できます。この制限に達した場合、OSはプロセスにメモリ不足であることを通知するか、メモリ不足プロセスに割り当てるメモリをさらに見つけようとする必要があります。

于 2012-06-26T13:28:53.367 に答える