1

からつばアルゴリズムの実装に成功した後、必要な時間を学校のアルゴリズムと比較することにしました。プログラムは 32768 桁までテストする必要があります。残念ながら、8192 桁で停止します (桁は配列に格納されます)。gdb で実行すると、次の出力が得られますProgramme terminated with SIGKILL, Killed。明らかに、私はウェブを検索し、(私はLinuxを使用しているため)リソースを消費しすぎたため、カーネルがプログラムを自動的に強制終了したことを発見しました。だから私の質問は:それを実行し続ける方法はありますか?

ご回答ありがとうございます。

4

2 に答える 2

1

最も可能性の高い原因は、メモリの枯渇です。topターミナルで実行することにより、この仮説を大まかにテストできます。

この場合valgrindは、あなたの友人です。mallocプログラム内で呼び出すすべての場所を注意深く調べ、free後で各配列を呼び出すようにしてください。

于 2013-08-30T19:46:37.447 に答える
0

Linux にプログラムの実行を強制する前に、やるべきことがたくさんあります (とにかくそれができるなら)。

  1. メモリ リークに注意してください (jons34yp の回答を参照)
  2. すべてのメモリ リークが解決したら、変数の宣言を確認します。使用されていないビットが割り当てられているビットはすべて 1 対多です。1 バイト (unsigned char) で十分な場合は、short を使用しないでください。ショートで十分な場合は、ロングを使用しないでください。float と double についても同じです。また、未使用のデータの最終的な構造体と共用体も確認してください。
  3. また、アルゴリズムとその実装方法を確認してください。たとえば、スパース行列は、配列全体をウエスト化する以外の方法で表すことができます。
  4. C コンパイラは、データ フィールドの整列に使用することに注意してください。これは、たとえば 13 バイトの配列の後、コンパイラは次のバイトを 32 ビットまたは 64 ビットの境界に揃える傾向があり、その間に未使用のバイトが残ることを意味します。構造体でも同じことが起こります。したがって、コンパイラのアライメント設定を確認してください。

これが解決策を見つけるのに役立つことを願っています。

よろしく、PB

于 2013-08-31T21:23:47.673 に答える