簡體   English   中英

特征實例包含另一個持有固定大小特征對象的實例

[英]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;
}

在您的情況下, AB都需要它。 如果A將從B繼承,它也將繼承new運算符(因此不必再次編寫)。 同樣,如果B本身永遠不會直接分配,而只是A一部分, EIGEN_MAKE_ALIGNED_OPERATOR_NEW需要AEIGEN_MAKE_ALIGNED_OPERATOR_NEW

另外,如果您針對x86_64架構進行編譯,則程序也很有可能會工作,因為大多數編譯器將始終對new的結果進行16字節對齊,另一方面,僅在各處添加EIGEN_MAKE_ALIGNED_OPERATOR_NEW幾乎不會對性能產生影響(除非您過度使用(取消分配對象)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM