我正在使用 Eigen 3.1.2,并且能够毫无问题地构建我的应用程序的 64 位目标。当我构建一个 32 位目标时,我得到了很多“未对齐”的断言。因此,我通过在所有类中定义 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 并为所有 STL 容器使用 Eigen::aligned_allocator 来遵循解决方法。这似乎已经处理了所有的断言。但是,在调试模式下,我会在某个时候崩溃。这是它崩溃的地方:
m_container.resize(N)
这是对 m_container 的调整大小操作,它是一个std::vector<std::vector<std::vector<pFOO> > >
(pFOO 的 3D 数组),其中 pFOO 是指向 FOO 对象的指针。我正在使用pFOO = std::shared_ptr<FOO>
. 此外,FOO 类有一些 Eigen 成员,我在该类中定义了一个公共 EIGEN_MAKE_ALIGNED_OPERATOR_NEW。默认情况下会std::shared_ptr<FOO>
使用对齐的分配器吗?为什么它会在调整大小操作时崩溃?我还能尝试什么?
编辑: Eigen 文档中建议的解决方法指出,对于包含 Eigen 成员的类的 STL 容器,我必须使用 Eigen::aligned_allocator 作为 std::vector 声明的附加参数。就我而言,我有一个 std::vector指向包含 Eigen 成员的类的指针。我依靠 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 进行对齐分配,并且没有在 std::vector 声明中使用 Eigen::aligned_allocator。