2017-07-21 66 views
2

我只是試圖分配一個包含Eigen :: Matrix的實例給Xenomai的共享內存。如何進行配置分配Eigen :: Matrix到共享內存(或堆)?

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

Robot類包含幾個Eigen :: Matrix。但是,我無法在共享內存中分配機器人對象。

但基本配置在下面工作得很好。

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

斷言日誌是:

徵::內部:: plain_array :: plain_array() [用T =雙; int Size = 36; INT MatrixOrArrayOptions = 0]: 斷言`(的reinterpret_cast(eigen_unaligned_array_assert_workaround_gcc47(陣列))& 0xf)== 0 & & 「這一說法在這裏解釋:」 「http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html」,「 ****閱讀本WEB PAGE !!! ****「'失敗。

我已經檢查了日誌中的網頁。但我的情況沒有解決辦法。

如何做位置分配Eigen :: Matrix到共享內存(或用戶定義的特定堆)?

回答

2

按照鏈接的網頁:

固定大小的矢量化的本徵對象必須絕對在16字節對齊的位置來創建,否則SIMD指令尋址他們會崩潰。

所以問題是mem+ROBOT_ADDR不是16字節對齊。你需要確保它是。

+2

另一種解決方案是使用不對齊的類型,如:'Matrix '而不是'Matrix4f'。 – ggael

+1

我解決它使用'__attribute__((對齊16))'。謝謝XD – Dayamre