memory
windows平台上的输出:
>> memory
Maximum possible array: 2046 MB (2.145e+009 bytes) *
Memory available for all arrays: 3226 MB (3.382e+009 bytes) **
Memory used by MATLAB: 598 MB (6.272e+008 bytes)
Physical Memory (RAM): 3561 MB (3.734e+009 bytes)
* Limited by contiguous virtual address space available.
** Limited by virtual address space available.
computer
在 linux/mac 上的输出:
>> [~,maxSize] = computer
maxSize =
2.814749767106550e+14 % Max. number of elements in a single array
有一些技巧(在这里找到):
>> java.lang.Runtime.getRuntime.maxMemory
ans =
188416000
>> java.lang.Runtime.getRuntime.totalMemory
ans =
65011712
>> java.lang.Runtime.getRuntime.freeMemory
ans =
57532968
如您所见,除了每个变量的内存限制外,所有变量的总存储空间也有限制。这对于 Windows 或 Linux 没有什么不同。
需要注意的重要一点是,例如在我的 Windows 机器上,即使我有足够的 RAM,也不可能创建两个 1.7GB 的变量,并且两者都不受最大变量大小的限制。
由于执行该minus
操作会将相同大小的结果分配给一个新变量(a
在您的情况下,或者ans
在不分配任何内容时),因此内存中至少需要有两个这些巨大的东西。
我的猜测是您遇到了可用于所有变量的总内存空间的第二个限制。