mathworks公司说过:
it depends on thememory of your computer,including virtul mem provided by your operating system.
不过实际上还是有限制的
你用下面这个函数看看你的版本matlab能用多大的数组.下面的输出是我的电脑:
>>[str,maxsize] = computer
str =
PCWIN
maxsize =
2.1475e+009
这里的maxsize就是你的matlab版本能用的最大元素个数.
我想一般不会有这么骇人听闻的大小的数组的.
细细的分析一下子,我们的操作系统是32位的,意味着它可以管理2^32=4G的地址空间.不管你安装了多少内存,怎么使用virtual memory,最多4G.
但是windows比较神奇,它自己把高位的2G空间留给自己用.这样一来,我们的程序能用的内存只有4-2=2G的空间的.
但是这2G的空间还不能被我们全部使用.我们power on电脑后,操作系统,各种后台的程序会占用掉不少内存空间.跟据你的操作系统不同,占用空间大小不一.比如我的机器,裸启动后会占用约300M内存.
现在启动matlab,用任务管理器看看用了多少内存?我的机器现在占用的内存个数是636M.这就意味着2G里面又有600M不能用了.
还剩1.4G空间.爽.but wait,看看我开头讲的,matlab分配数组时,一定要分配一个contiguous addre内存.你能保证你的机器剩下的1.4G里面有多少是连续的内存空间么?这个问题比较玄乎.
但是matlab R14里面提供了一个函数可以查看有多少连续的空间可以用来分配给数组:
>> m = feature(\'DumpMem\')
然后刷刷刷的好多东西显示出来,看最后一行:
Largest available memory block is 838795264 bytes (799.94 MB) located at addre 11010000
这就是现在我的机器,1.4G里面能分数组的空间是大概800M,就是说有800M的连续地址空间,还不少,看来我的机器比较纯洁.800M/8=100M.
好了,这个就是实际中\"最大支持多大的数组\".
问题回答完毕.
btw,多用用clear,pack函数清理你的内存.还有一个就是在程序开始前pre allocate你的内存,也就是说,在内存还没有给搞的东一块西一块的时候,就先着大的空间,这样多爽.
最后,实在不行,就-nojvm,这样还能节省一点java的界面内存.