c++ - 32 位应用程序的特征最大矩阵大小

标签 c++ matrix eigen

所以,我找到了 Eigen当我尝试声明大于 10000x10000 的矩阵时程序包崩溃。我需要像这样声明一个矩阵......可靠地大约 13000x13000 个元素。我进行了如下测试:

for( int tortureEigen = 1 ; tortureEigen < 50000 ; tortureEigen++ )
{
  printf( "Torturing Eigen with %dx%d..\n", tortureEigen, tortureEigen ) ;
  Eigen::MatrixXd m( tortureEigen, tortureEigen ) ;
}

我的机器(6 GB RAM)在 14008 个元素处崩溃。

我有点失望!我认为 Eigen 就像 MATLAB 或 Octave,使用更大的数组不应该崩溃,即使它确实碰到了磁盘或其他东西..

更重要的是,当我运行这个测试并保持 TaskMan 打开时,创建这些矩阵的过程甚至没有使用那么多内存。 TaskMan 报告使用量低于 2k。

使用 Eigen 2.0.15 稳定版

最佳答案

Eigen 开发者在这里。你最好在我们的支持 channel 上询问 Eigen 问题,例如论坛...;-)

简短回答:您使用的是固定大小矩阵还是动态大小矩阵?

  • 如果是固定尺寸,切换到动态尺寸(对于这么大的尺寸,无论如何这是一个明智的选择)

  • 如果您遇到动态大小矩阵的错误,我很惊讶,但与此同时我可以看到值 10000 的来源。无论如何,如果您升级到 eigen3(开发分支),您的问题就会消失。

关于c++ - 32 位应用程序的特征最大矩阵大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449434/

相关文章:

c++ - 如何使用 openMP 并行化内部循环?

c++ - 在 C++ 中存储 n 位的 vector<bool> 的大小(以字节为单位)

c++ - Opencv,在编译时找出像素的类型

c++ - block 操作不适用于 Eigen

c++ - 确保重新编译时处理定义

c++ - 禁用 Eigen 表达式与 const 引用的临时绑定(bind)

c++ - 固定大括号(大括号匹配)工具

c++ - C/C++ 指针技巧修复

algorithm - 具有循环依赖的 DFS

从R中的矩阵中删除对角线元素