matlab子函数执行完成后是怎么释放内存的?
http://www.ilovematlab.cn/thread-274940-1-1.html
(出处: MATLAB中文论坛)
子函数(不只是本地函数)是可以共享主函数的空间的,例如这里的A,B函数他们的workspace是共享的,如果在A中调用B,可以不用把参数当做输入传入B即可在B中使用
funciton A...
function B
...
end
end
另外matlab并没有给很多在内存管理上的自由,而且内部也有自己的优化。所以即使你不采取什么措施,matlab内部的JIT等机制也会尽量优化内存管理,避免很多不必要的操作。多数情况下,matlab鼓励按照正常自然的方式去编程,而不是为了某些可能的收益采用古怪且难以理解的方式去编程,如果真的非常在乎性能,建议还是用底层一些的编译性语言
你没有听明白我的意思,我告诉你的意思就是A,B会共享工作空间,所以如果反复调用同一个变量,那么就把这个变量在A中建立,则在B中可以直接使用,例如这里的s和i:
function s = A(n)
s = zeros(n,1);
for i = 1:n
B
end
function B
s(i) = i;
end
end
另外,不建议使用变长数组,应该在最初就为变量声明正好或足够的空间,例如这里的s = zeros(n,1),并且在后续过程中不改变s的大小
另外你对内存碎片的想法只是你对matlab内存管理的一个猜想,可能是正确的,但也可能不是,matlab自己有很多优化机制避免糟糕的内存利用,即使你不采用共享内存空间的手段,matlab也未必就会每次为B创建新的空间,而造成内存碎片;而更有可能会自动采用更合理的方式处理