2016-03-24 19 views
0

各スレッドには独自のスタックがあるため、次のような状況ではどうなりますか?コンテキストスイッチがスタックオーバーフローを引き起こす可能性がありますか?

  1. スレッド1 2スレッドへ
  2. コンテキストスイッチ非常に深い再帰呼び出しを行い、スレッド2は、ヒープ
  3. に大量のメモリを成長
  4. コンテキストは後1

スレッドに切り替えますステップ3、スタックとヒープの間に衝突がありますか?ヒープ上の新しいチャンクが割り当てられると、スタックごとにチェックされますか?

1)メモリがスタックに割り当てられているとメモリがヒープに割り当てられている:ページ保護とはバグや論理メモリ変換を想定していない

+0

「スタックがヒープに向かって成長し、満たされたときにオーバーフローする」という古典的なモデルは、マルチスレッドのためにきれいに動作しません。理由は簡単です、複数のスタックがあります。仮想メモリーとページングがある場合、通常の解決策は、各スタックの下にアクセスすると例外を発生させる「保護ページ」を割り当てることです。 – EOF

+0

コンテキストの切り替えには、コンテキストをどこかにプッシュすることが含まれます。おそらくスタック、おそらくスレッド記述子なので、質問に対する答えは実装固有です。スタックに達していれば、終了します。 – mah

+0

私はかなり "スタックがヒープに向かって成長する"ことは間違っていると思います。それはMS-DOSやおそらくWindows 3.1でも当てはまりました。 – immibis

答えて

0

。ヒープまたはスタックできるメモリはありません。

2)スレッド1のスタックはヒープと衝突しません。

3)スレッド1がスタックを拡張する必要があり、スレッド2によってヒープが成長することでそれを防ぐことができる可能性があります。

関連する問題