C++11 特征对准问题

C++11 特征对准问题,c++11,eigen,memory-alignment,eigen3,C++11,Eigen,Memory Alignment,Eigen3,中列出的关于Eigen的内存对齐问题是否仍然适用于C++11?C++11似乎已经能够通过支持对齐的alignas和std::allocator正确地对齐堆栈和堆上的对象了。是的,在C++11中仍然存在对齐问题。alignas说明符对动态分配没有影响,因此仍然可能导致未对齐,从而导致Eigen抛出断言 您必须继续使用Eigen提供的用于对齐分配的设施,例如用于分配对象的Eigen\u MAKE\u aligned\u OPERATOR\u NEW,或用于对齐容器的Eigen::aligned\u

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

是的,在C++11中仍然存在对齐问题。
alignas
说明符对动态分配没有影响,因此仍然可能导致未对齐,从而导致Eigen抛出断言


您必须继续使用Eigen提供的用于对齐分配的设施,例如用于分配对象的
Eigen\u MAKE\u aligned\u OPERATOR\u NEW
,或用于对齐容器的
Eigen::aligned\u allocator

而问题具体是关于C++11的,值得注意的是,即将推出的Egeng版本3.4与兼容C++17的编译器相结合,将使我们不再需要使用
Egeng\u MAKE\u ALIGNED\u OPERATOR\u NEW
Egeng::ALIGNED\u分配器
。前一个宏实际上甚至是空的。这可以通过一种新形式的
运算符new
实现,该运算符专门设计用于支持过度对齐。

您是在谈论文档中引用gcc错误的部分吗?另外,您不能按值传递特征对象,需要为容器使用自定义分配器,一种特殊的
std::vector
,宏在包含特征对象的类中重载
操作符new
。因为在C++11中,堆栈和堆内存似乎支持内存对齐。