2

私は、アプリケーションMathLinkから独立した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使用済みのメモリは解放されないことを除いて、解放されると思います。

何か案は?

4

2 に答える 2

6

Ok。バージョン5以下を使用している可能性はかなり低いと思われるため、これを回答として投稿します。

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

ここで確認してください

于 2011-06-17T16:55:46.163 に答える
1

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

$HistoryLength = 0

同時に、MathKernel プロセスには、長い計算でシステム メモリが蓄積され、解放されないという既知の問題があります。

問題を最終的に解決する唯一の方法は、カーネルが大量のメモリを消費する場合、または使用可能な空き物理メモリの量が少なくなりすぎた場合にカーネルを再起動することです。このタスクは自動化できます。


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

バージョン 8 では、メモリ アロケータが書き直され、改善されました。

(そのような巨大な努力とそのような素晴らしい実行に対して、なんと短い文章でしょう)

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

于 2011-06-18T08:36:24.077 に答える