0

こんにちは私は私のコードにmpir(ライブラリ)を使用してみました。コードを変更し、すべてをmpirで動作するように変換しました。私のコードは、相互に依存しているループと方程式内の一連のループで構成されているため、間違いを見つけるのは非常に困難です。デバッグ後にコードを実行したところ、特定のループの最初の500回の反復で正常に機能し、次のメッセージが表示されました。

GNU MP:メモリを割り当てることができません(サイズ= 24)続行するには任意のキーを押してください。。。

この問題の原因はわかりません。それは記憶と関係がありますか?それが最初の反復でうまく機能した場合、それがメモリでない場合、なぜ今問題があるのでしょうか?

コードを再度作成しましたが、今回はさらに実行されました。メッセージを出す前に、最初の2000回の反復を行いました。

GNU MP:メモリを割り当てることができません(サイズ= 16)続行するには任意のキーを押してください。。。

誰かが問題が何である可能性があるか考えていますか?

4

1 に答える 1

0

すでにご存知のようです。ほとんどの場合、メモリリークです。

MPIRのマニュアルのセクション3.7を参照してください。

mpz_t変数とmpq_t変数は、割り当てられたスペースを減らすことはありません。通常、これは頻繁な再割り当てを回避するため、最良のポリシーです。特定の時点でメモリをヒープに戻す必要があるアプリケーションは、mpz_realloc2を使用するか、不要になった変数をクリアできます。

メモリリークのデバッグを支援するツールであるValgrindも役立つ場合があります。幸運を。

于 2013-03-22T16:49:10.607 に答える