さまざまなアルゴリズムを実験的に評価するように設計された、いくつかのヒューリスティック検索アルゴリズムといくつかのドメインを実装するプログラムがあります。このプログラムは C++ で記述され、GNU ツールチェーンを使用してビルドされ、64 ビットの Ubuntu システムで実行されます。実験を実行するときは、bash のulimit
コマンドを使用して、プロセスが使用できる仮想メモリの量を制限し、テスト システムがスワッピングを開始しないようにします。
特定のアルゴリズム/テスト インスタンスの組み合わせが、私が定義したメモリ制限に達しました。ほとんどの場合、プログラムは std::bad_alloc 例外をスローします。この例外はデフォルト ハンドラーによって出力され、その時点でプログラムは終了します。場合によっては、これが発生するのではなく、プログラムが単純にセグメンテーション違反を起こすことがあります。
未処理の std::bad_alloc を報告して終了するのではなく、メモリ不足のときにプログラムが時々 segfault になるのはなぜですか?