gpt4 book ai didi

c++ - 如何将 Eigen::Matrix 分配到共享内存(或堆)?

转载 作者:太空狗 更新时间:2023-10-29 21:34:51 26 4
gpt4 key购买 nike

我只是试图将一个包含 Eigen::Matrix 的实例分配给 Xenomai 的共享内存。

unsigned char * mem; //shared memory pointer
Robot * robot = new ((void *)(mem+ROBOT_ADDR)) Robot();

Robot 类包含几个 Eigen::Matrix。但是,我无法在我的共享内存中分配机器人对象。

但基本分配运行良好,如下所示。

Robot * robot = new Robot(); //work well!

断言日志是:

Eigen::internal::plain_array::plain_array() [with T = double; int Size = 36; int MatrixOrArrayOptions = 0]: Assertion `(reinterpret_cast(eigen_unaligned_array_assert_workaround_gcc47(array)) & 0xf) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.

我已经检查了日志中的网页。但是我的情况没有解决方案。

如何将 Eigen::Matrix 分配到共享内存(或用户定义的特定堆)?

最佳答案

根据链接网页:

fixed-size vectorizable Eigen objects must absolutely be created at 16-byte-aligned locations, otherwise SIMD instructions addressing them will crash.

所以问题是 mem+ROBOT_ADDR 不是 16 字节对齐的。您需要确保它是。

关于c++ - 如何将 Eigen::Matrix 分配到共享内存(或堆)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45228255/

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