2017-07-21 7 views
2

Xenomaiの共有メモリにEigen :: Matrixを含むインスタンスを割り当てようとしましたが、配置割り当てEigen :: Matrixを共有メモリ(またはヒープ)に割り当てる方法は?

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

ロボットクラスにはいくつかのEigen :: Matrixが含まれています。しかし、共有オブジェクトにはロボットオブジェクトを割り当てることができません。

しかし、基本的な配分は以下の通りうまくいっていました。

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

アサーションログがある:

固有::内部:: plain_array :: plain_array() [二重T =有します。 intサイズ= 36; int型MatrixOrArrayOptions = 0]: アサーション `(reinterpret_castは(eigen_unaligned_array_assert_workaround_gcc47(配列))& 0xFの)== 0 & &は "この主張は、ここで説明されている:" "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html"" ****このWebページを読んで! **** "'は失敗しました。

私はすでにログのウェブページをチェックしました。しかし、私の場合は解決策がありません。

Eigen :: Matrixを共有メモリ(またはユーザー定義の特定のヒープ)に配置する方法は?

答えて

2

リンクされたウェブページを1として:

固定サイズのベクトル化固有のオブジェクトには、絶対にそうでない場合は、それらに対処SIMD命令がクラッシュします、16バイトの整列の場所に作成する必要があります。

したがって、mem+ROBOT_ADDRは16バイト境界ではありません。あなたはそれが確実であることを保証する必要があります。

+2

別の解決策は、 'Matrix4f'の代わりに' Matrix 'のような整列しない型を使うことです。 – ggael

+1

私は '__attribute__((aligned aligned))'を使うように解決しました。おかげでXD – Dayamre

関連する問題