【发布时间】:2018-10-08 23:24:54
【问题描述】:
我想知道在尝试使用 MATLAB 的写时复制(延迟复制)机制来链接来自单元格数组中多个单元格的相同大矩阵时,是否有办法查看我是否做对了.
例如:
img = randn(500);
[dx,dy] = gradient(img);
S = cell(2,2);
S{1,1} = dx.^2;
S{2,2} = dy.^2;
S{1,2} = dx.*dy;
S{2,1} = S{1,2}; % should be a reference, as long as not modified
但是看看whos的输出:
>> whos
Name Size Bytes Class Attributes
S 2x2 8000448 cell
dx 500x500 2000000 double
dy 500x500 2000000 double
img 500x500 2000000 double
我希望S 占用 6 MB,而不是 8 MB。
有没有办法验证程序中没有错误,并且这两个单元格最后仍然引用同一个数组?
我知道函数memory,但遗憾的是它只适用于 Windows 平台(我在 MacOS 上)。
【问题讨论】:
-
推测:由于
cell没有分配任何内存,分配强制分配并在进程中创建一个新数组。 -
作为
memory的替代品,您可以使用top,但两者都不能准确显示实际内存使用情况。相反,使用一些 undocumented mex 函数可以创建访问者,可能是分层的mxArrays,并检查每个元素的共享状态和相关元素的 get size。 -
@TroyHaskin:是的,创建了一个数组,但它的数据指针指向另一个数组的数据。他们共享数据。
-
@rahnema1:这是一个解决方案,是的。感谢您的想法!
-
一个简单的解决方案是,如果函数
feature('MemStats')对您有用,但它不适用于在 Mac 上使用 Matlab 2018a 的我。 undocumentedmatlab.com/blog/undocumented-feature-function