質問

私が使う MathLink aから独立したMMA式を送信および受信する C++ 文字列としてのアプリケーション。

std::string expression[N];
// ...
for(int i = 0; i < N; ++i) {
    MLPutFunction(l, "EnterTextPacket", 1);
    MLPutString(l, expression[i].c_str());
    MLEndPacket(l);

    // Check Packet ...

    const char* result;
    MLGetString(l, &result);

    // process result ...

    MLDisownString(l, result);
}

私はそれを期待します MLDisownString 使用されていないことを除いて、使用されているメモリを解放します。

何か案は?

役に立ちましたか?

解決

Ok。これを答えとして投稿します。なぜなら、あなたがバージョン5以下を使用しているオッズはかなり低いと思うからです。

`As of Version 6.0, MLDisownString() has been superseded by MLReleaseString()`

それを確認してください ここ

他のヒント

まず、次のようなパラメーターを指摘する必要があります $HistoryLength. 。多くの場合、それをゼロに設定すると、メモリの要件を大幅に削減できます。

$HistoryLength = 0

同時に、Mathkernelプロセスでは、長い計算でシステムメモリを蓄積し、それをリリースしないことは既知の問題です。

最終的に問題を解決する唯一の方法は、メモリが多すぎるとき、または利用可能な無料の物理メモリの量が小さすぎるときにカーネルを再起動します。このタスクは自動化できます。


試していない場合 Mathematica 8それでも、それは試してみる価値があるかもしれません。 Oliver Ruebenkoenigによると:

バージョン8の場合、メモリアロケーターが書き換えられ、改善されました。

(このような巨大な努力とそのような素晴らしい実行のためのなんて小さな文)

しかし、私はまだバージョン8を試していませんが、何も言えません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top