![](/img/trans.png)
[英]Eigen fixed-size matrices in shared memory using boost interprocess
[英]Eigen instance containing another instance holding a fixed-size eigen object
如果定義的結構具有固定大小的可矢量化Eigen類型成員,則必須重載其“ operator new”,以便生成16字節對齊的指針。 幸運的是,Eigen為您提供了一個宏EIGEN_MAKE_ALIGNED_OPERATOR_NEW來為您執行此操作。
但是,對於我來說尚不清楚,對於包含其他類實例(又包含固定大小的容器)的類實例,是否也應使用EIGEN_MAKE_ALIGNED_OPERATOR_NEW
宏?
例如,在以下代碼段的A類中,是否需要EIGEN_MAKE_ALIGNED_OPERATOR_NEW?
#include <Eigen/Core>
class B
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
Eigen::Vector2d v;
};
class A
{
public:
B b;
};
int main(int argc, char *argv[])
{
B* b = new B(); // this should have no alignement problems as we use EIGEN_MAKE_ALIGNED_OPERATOR_NEW
A* a = new A(); // how about this one?
return 0;
}
在您的情況下, A
和B
都需要它。 如果A
將從B
繼承,它也將繼承new
運算符(因此不必再次編寫)。 同樣,如果B
本身永遠不會直接分配,而只是A
一部分, EIGEN_MAKE_ALIGNED_OPERATOR_NEW
需要A
的EIGEN_MAKE_ALIGNED_OPERATOR_NEW
。
另外,如果您針對x86_64架構進行編譯,則程序也很有可能會工作,因為大多數編譯器將始終對new
的結果進行16字節對齊,另一方面,僅在各處添加EIGEN_MAKE_ALIGNED_OPERATOR_NEW
幾乎不會對性能產生影響(除非您過度使用(取消分配對象)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.