首页 > 解决方案 > 我可以让 Eigen::VectorXd 的大小大于大小限制 (2^32) 吗?

问题描述

我正在尝试初始化一个大小为 60,000,000,000 的 VectorXd。运行我的软件时,由于矢量大小,我收到以下错误。

有什么建议可以解决这个问题吗?

a.out: /usr/local/EasyBuild/software/Eigen/3.3.3-intel-2018a/include/Eigen/src/Core/PlainObjectBase.h:312: void Eigen::PlainObjectBase::resize(Eigen::Index ) [衍生 = Eigen::Matrix; Eigen::Index = long int]: 断言 `((SizeAtCompileTime == Dynamic && (MaxSizeAtCompileTime==Dynamic || size<=MaxSizeAtCompileTime)) || SizeAtCompileTime == size) && size>=0' 失败。中止(核心转储)

标签: c++eigen

解决方案


值“Dynamic”在 Core/util/Constants.h 中定义为

//Changing the value of Dynamic breaks the ABI, as Dynamic is often used as a template parameter for Matrix.
const int Dynamic = -1;

因此,您可以通过将其重新定义为更大的类型来摆脱特定断言,例如

const long Dynamic = -1;

但是,模板参数被指定为int整个 Eigen,因此您可能需要在很多地方更改它。另外,您应该注意上面的评论。您需要确保使用相同的修补 Eigen 版本编译链接的所有内容。

此外,您将需要不合理数量的 RAM 或交换空间才能使该程序运行。


推荐阅读