我目前正在MATLAB中实现不同的信号处理算法,以后用C ++实现其中一种。要在这些之间进行选择,我将执行一些测试,一个是内存使用检查。也就是说,我想看看不同算法使用多少内存。由于实现被分为子功能,我在收集有关实际内存使用情况的信息时遇到了问题。
这是我到目前为止所尝试的:
我使用了探查器来检查每个函数的内存使用情况。 问题:它只显示已分配的内存使用情况。它没有显示例如每个函数中变量的内存使用情况。
我在每个函数的末尾都使用了whos来收集有关函数工作区中所有变量的信息。然后我将这些添加到全局变量中。 问题:即使在执行完成后,全局变量仍在不断增加,而且它似乎永远不会停止。
现在回答我的问题。我怎样才能以一种相当简单的方式获取有关程序内存使用情况的信息,包括所有功能?
祝你好运
答案 0 :(得分:2)
我认为你在每个函数结束时(就在它返回之前)调用whos
的策略是一个很好的策略;但也许你想将结果打印到屏幕而不是全局。如果它“不断增加”,那么也许你有一个被你不知道的回调函数,其中包括你的一个whos
调用。通过打印到屏幕(可能包括disp('**** memory usage at the end of <function name> ***')
就在它之前,你会发现为什么它“继续”。
使用memory
的替代方案有点帮助,但它提供了有关“可用”内存的信息,以及Matlab使用的所有内存(不仅仅是变量)。
当然,任何内存使用快照都不一定能达到峰值 - 这可能是像
这样的声明x = sum(repmat(A, [1000 1]));
需要相当大的峰值内存使用量(当您将矩阵A
复制1000次时),但是之前或之后的内存快照(或运行whos
)将不会告诉您什么刚刚发生......
答案 1 :(得分:1)
监视内存使用情况的最佳方法是使用分析器,并打开内存选项:
profile -memory on %运行你的代码 profreport
探查器返回内存使用情况和函数调用统计信息。请注意,内存选项会影响您的执行速度。
答案 2 :(得分:0)