documentation中列出的Eigen的内存对齐问题是否仍然适用于C ++ 11?似乎C ++ 11已经能够正确地对齐堆栈上和堆上的对象,alignas
和std::allocator
支持对齐。
答案 0 :(得分:4)
是的,对齐问题仍然存在于C ++ 11中。 alignas
说明符对动态分配没有影响,因此仍可能导致未对齐,导致Eigen抛出断言。
您必须继续使用Eigen为对齐分配提供的工具,例如EIGEN_MAKE_ALIGNED_OPERATOR_NEW
用于分配对象,或Eigen::aligned_allocator<T>
用于对齐容器。
答案 1 :(得分:0)
虽然问题是关于 C++11,但值得注意的是,即将推出的 Eigen 3.4 版与 C++17 兼容编译器的结合将使我们无需使用 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
和 { {1}}。以前的宏实际上甚至是空的。这可以通过专门设计用于支持过度对齐的新形式的 Eigen::aligned_allocator<T>
来实现。