1

我目前正在 MATLAB 中实现不同的信号处理算法,以便稍后在 C++ 中实现其中一种。为了在这些之间进行选择,我将执行一些测试,其中一个是内存使用情况检查。也就是说,我想看看不同算法使用了多少内存。由于实现分为子功能,因此我在收集有关实际内存使用情况的信息时遇到了问题。

这是我迄今为止尝试过的:

  1. 我使用分析器检查每个函数的内存使用情况。问题:它只显示分配的内存使用情况。它没有显示例如每个函数中变量的内存使用情况。

  2. 我在每个函数的末尾都使用了 whos 来收集有关函数工作区中所有变量的信息。然后我将这些添加到全局变量中。问题:即使执行完成,全局变量也会不断增加,而且似乎永远不会停止。

现在我的问题。如何以一种相当简单的方式获取有关我的程序的内存使用情况的信息,包括所有功能?

此致

4

3 回答 3

2

我认为您whos在每个函数结束时(就在它返回之前)调用的策略是一个很好的策略;但也许您想将结果打印到屏幕而不是全局。如果它“不断增加”,那么也许你有一个回调函数被你不知道地调用,其中包括你的一个whos调用。通过打印到屏幕上(也许disp('**** memory usage at the end of <function name> ***')在它之前包括一个,你会发现它为什么“继续”。

using 的替代方法memory有些帮助,但它提供了有关“可用”内存的信息,以及 Matlab 使用的所有内存(不仅仅是变量)。

当然,内存使用的任何快照都不一定能达到峰值 - 有可能这样的语句

x = sum(repmat(A, [1000 1]));

将需要相当大的峰值内存使用量(当您复制矩阵A1000 次时),但之前或之后的内存快照(或正在运行whos)不会告诉您刚刚发生了什么......

于 2013-03-12T22:07:52.783 回答
1

监视内存使用情况的最佳方法是使用分析器,并打开内存选项:

profile -memory on % 运行你的代码 profreport

分析器返回内存使用和函数调用统计信息。请注意,内存选项会影响您的执行速度。

于 2015-09-17T02:35:42.293 回答
0

可以使用记忆功能。另请参阅内存管理功能。看看matlab 内存使用情况

于 2013-03-12T21:58:14.403 回答