[解決済み] スタックとヒープがぶつかるとどうなるか
2022-02-14 06:29:32
質問
スタックとヒープがぶつかるとどうなるのか気になります。どなたか遭遇したことのある方がいらっしゃいましたら、そのシナリオを説明してください。
解決方法は?
モダンなOS上で動作するモダンな言語では、スタックオーバーフロー(万歳!)または
malloc()
または
sbrk()
または
mmap()
は、ヒープを大きくしようとすると失敗します。 しかし、すべてのソフトウェアがモダンなわけではありませんから、失敗のモードを見てみましょう。
-
スタックがヒープに成長した場合、一般的なCコンパイラはヒープのデータ構造を黙って上書きし始めます。 最近のOSでは、1つまたは複数の仮想メモリー ガードページ スタックが無制限に増えるのを防ぐものです。 ガードページのメモリ量が、少なくとも成長しているプロシージャのアクティベーションレコードのサイズと同じである限り、OSはセグメンテーションフォールトを保証してくれます。 MMUのないマシンでDOSを動かしている場合は、おそらくお手上げでしょう。
-
ヒープがスタックに成長した場合、オペレーティングシステムは常に状況を認識し、何らかのシステムコールが失敗するはずです。 の実装は
malloc()
ほぼ間違いなくこの失敗に気づきNULL
. その後どうするかは、あなた次第です。
私はいつも、OSがスタックのオーバーフローを防ぐためにガードページを設置することを望むコンパイラーたちの意欲に驚かされます。 もちろん、このトリックは、それぞれが独自のスタックを持つ何千ものスレッドを持ち始めるまではうまくいくのですが...。
関連
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] どちらが速いですか?スタックアロケーションとヒープアロケーション
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された