特征对齐问题

时间:2015-04-09 10:44:58

标签: c++11 eigen memory-alignment eigen3

documentation中列出的Eigen的内存对齐问题是否仍然适用于C ++ 11?似乎C ++ 11已经能够正确地对齐堆栈上和堆上的对象,alignasstd::allocator支持对齐。

2 个答案:

答案 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> 来实现。