Czy problemy z wyrównaniem pamięci z Eigenem wymienione w documentation nadal mają zastosowanie w C++ 11? Wygląda na to, że C++ 11 może już zadbać o prawidłowe wyrównanie obiektów na stosie i na stercie, z alignas
i std::allocator
, które obsługuje wyrównanie.Problemy z wyrównaniem Eigen
7
A
Odpowiedz
3
Tak, problemy z wyrównaniem są nadal obecne w C++ 11. Specyfikator alignas
nie ma wpływu na alokacje dynamiczne, co może w dalszym ciągu powodować niedopasowania, powodujące asercje generowane przez Eigen.
Będziesz musiał nadal korzystać z urządzeń Eigen zapewnia wyrównane alokacje, takie jak EIGEN_MAKE_ALIGNED_OPERATOR_NEW
do przydzielania obiektów lub Eigen::aligned_allocator<T>
do wyrównywania pojemników.
Czy mówisz o części dokumentacji odnoszącej się do błędu gcc? –
Ponadto nie można przekazać obiektu Eigen według wartości, należy użyć niestandardowego przydziału dla kontenera, spezjalnego 'std :: vector' i makra, aby przeciążyć' operator new' w klasach zawierających obiekty Eigen. Ponieważ w C++ 11 wyrównanie pamięci wydaje się być obsługiwane dla pamięci stosu i sterty. – tmlen