如何进行放置分配特征::矩阵到共享内存(或堆)?

How to do placement allocation Eigen::Matrix to Shared Memory (or Heap)?

本文关键字:内存 共享 或堆 何进行 分配 特征      更新时间:2023-10-16

我只是尝试将一个包含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::p lain_array

::p lain_array(( [T = double; int size = 36; int MatrixOrArrayOptions = 0]: Assertion '(reinterpret_cast(eigen_unaligned_array_assert_workaround_gcc47(array(( & 0xf( == 0 &&"这个断言在这里解释:"http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " 阅读此网页!!"' 失败。

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

如何进行放置分配 Eigen::Matrix 到共享内存(或用户定义的特定堆(?

根据链接的网页:

固定大小的可矢量化特征对象必须绝对在 16 字节对齐的位置创建,否则寻址这些对象的 SIMD 指令将崩溃。

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