gpt4 book ai didi

c++ - Eigen 未对齐断言

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:26 26 4
gpt4 key购买 nike

我正在使用 Eigen 3.1.2,我能够毫无问题地构建我的应用程序的 64 位目标。当我构建一个 32 位目标时,我得到了很多“未对齐”的断言。所以我跟着workaround通过在我所有的类中定义 EIGEN_MAKE_ALIGNED_OPERATOR_NEW,并为所有 STL 容器使用 Eigen::aligned_allocator。这似乎已经解决了所有断言。但是,在 Debug模式下,我在某个时刻崩溃了。这是它崩溃的地方:

m_container.resize(N)

这是对 m_container 的调整大小操作,它是 std::vector<std::vector<std::vector<pFOO> > > (pFOO 的 3D 数组),其中 pFOO 是指向 FOO 对象的指针。我正在使用 pFOO = std::shared_ptr<FOO> 定义指针.此外,类 FOO 有几个 Eigen 成员,我在类中定义了一个公共(public) EIGEN_MAKE_ALIGNED_OPERATOR_NEW。威尔std::shared_ptr<FOO>默认使用对齐分配器?它会在调整大小操作时崩溃的任何原因?我还能尝试什么?

编辑:Eigen 文档中建议的解决方法指出,对于包含 Eigen 成员的类的 STL 容器,我必须使用 Eigen::aligned_allocator 作为 std::vector 声明的附加参数。在我的例子中,我有一个 std::vector 的 pointers 指向包含 Eigen 成员的类。我依靠 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 进行对齐分配,并且没有在 std::vector 声明中使用 Eigen::aligned_allocator。

最佳答案

Eigen 的文档是指直接使用 Eigen 对象的 vector,而不是指向 Eigen 对象的指针的 vector 。 allocator 参数不会传递给 shared_ptr。由于您必须自己使用堆分配的对象初始化 shared_ptr [1],因此您有责任以正确的对齐方式进行分配。

[1] http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr

关于c++ - Eigen 未对齐断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com