首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mathlink内存使用累积

Mathlink内存使用累积
EN

Stack Overflow用户
提问于 2011-06-18 00:45:24
回答 2查看 300关注 0票数 2

我使用MathLink以字符串的形式从C++应用程序发送和接收独立的mma表达式。

代码语言:javascript
复制
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释放已使用的内存,但事实并非如此。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-18 00:55:46

好的。将此作为答案发布,因为我认为您使用版本5或更低版本的几率非常低:

代码语言:javascript
复制
`As of Version 6.0, MLDisownString() has been superseded by MLReleaseString()`

Check it

票数 6
EN

Stack Overflow用户

发布于 2011-06-18 16:36:24

首先,我应该指出像$HistoryLength这样的参数。将其设置为零通常可以显著减少内存需求:

代码语言:javascript
复制
$HistoryLength = 0

同时,MathKernel进程的已知问题是它在长时间的计算中积累了系统内存,并且没有释放它。

最终解决这个问题的唯一方法是在内核占用太多内存或可用可用物理内存量变得太小时重新启动内核。这项任务可以自动化。

如果您还没有尝试过Mathematica 8,那么可能值得一试,因为according to Oliver Ruebenkoenig

版本8的

内存分配器已被重写和改进。

(对于如此巨大的努力和如此精细的执行来说,这是多么小的一句话)

但我还没有尝试过版本8,也不能对此发表任何意见。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6389014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档