Mic*_*l A 4 matlab memory-management matrix dynamic-arrays
运行此代码:
n = 5;
x = zeros(n, 1);
for ix=1:10
x(ix) = rand();
disp(getfield(whos('x'), 'bytes'))
end
Run Code Online (Sandbox Code Playgroud)
输出:
40
40
40
40
40
48
56
64
72
80
Run Code Online (Sandbox Code Playgroud)
这似乎表明,当Matlab调整矢量大小时,它会调整大小以使其具有所需的空间,而不是更多.所以,一次只有一个元素.
将此与Sun的Java Array实现中的方法进行对比,后者分配了足够的空间,以便每次调整都不需要在初始边界之上的每个赋值上进行.显然,由于Matlab不是开源的,所以没有办法告诉100%他们做了什么,但有没有更好的方法来了解调整大小是如何完成的?上面的代码不是估计这个的好方法吗?