4

我想知道为什么 Matlab 不使用交换,而是抛出错误“内存不足”?

Matlab不应该放慢速度而不是抛出“内存不足”吗?

这与Java有关吗?

补充说

我知道“内存不足”意味着它的连续内存不足。交换没有连续的内存,或者?我很困惑...

4

1 回答 1

6

这与 MATLAB 无关。当您尝试分配比硬件中更多的内存时会发生什么是操作系统特定的行为。

在 Linux 上,默认情况下,操作系统会“乐观地”分配您想要的几乎任何东西,即交换空间也被视为可分配内存。你会得到你想要的——没有 OOM 错误,但使用交换分配的数据计算速度很慢。此“功能”称为过度使用。您可以通过修改 Linux 中的过度使用设置来更改此行为(例如,查看此处以获取简要摘要)。

Overcommit 可能不是使用它来解决 MATLAB 中更大问题的最佳主意,因为整个操作系统开始运行非常缓慢。它绝对不能与有意识地在计算中使用硬盘的优化“核外”实现相提并论。

这就是它在 Linux 上的样子。我不知道如何更改 Windows 上的内存分配行为,但我怀疑您是否真的想这样做。你需要更多的内存。

而且您确实使事情变得混乱-交换与连续内存无关。操作系统分配的内存是“虚拟内存”,无论底层物理内存是否可以映射到连续页面,它都是连续的。

编辑对于使用磁盘空间作为额外内存的大型矩阵上的透明“核外”操作,您可能需要查看VVAR fileexchange project。这个类伪装成一个普通的 MATLAB 类,但它对底层 HDD 文件进行操作。请注意,MATLAB 通常的数组大小限制仍然适用。

于 2012-09-17T08:24:48.823 回答