Eigen3 内存对齐问题

Eigen3 内存对齐问题

参考官方文档
如何设置取消内存对齐的操作没找到

以下内存对齐问题c++17好像不需要考虑可以在CMakeLists.txt中添加set(CMAKE_CXX_STANDARD 17)指定编译器使用c++17

主要分为以下3种情形:

主要每种情形是相互独立考虑的。比如即使在class中使用了EIGEN_MAKE_ALIGNED_OPERATOR_NEW宏定义,但是当在该class中继续使用STL容器来存储Eigen数据类型时候还是需要对其设置分配Eigen::aligned_allocator内存方式。

以 Eigen 对象为class成员的结构

class Foo
{
  ...
  Eigen::Vector4d v;
  ...
public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

定义class时候加入Eigen3提供的宏

public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW

使用STL容器或手动内存分配

  1. 数组容器
    使用内存对齐的方式定义
std::vector<Eigen::Vector4f,Eigen::aligned_allocator<Eigen::Vector4f> >
  1. 有序容器
    使用内存对齐的方式定义,有序容器还要知道数据类型的排序方式。
std::map<int, Eigen::Vector4d, std::less<int>, 
         Eigen::aligned_allocator<std::pair<const int, Eigen::Vector4d> > >

将 Eigen 对象按值传递给函数

c++中的值传递涉及拷贝操作,内存对齐会出错。

  1. 使用如下方式取代值传递void my_function(Eigen::Vector2d v);
void my_function(const Eigen::Vector2d& v);
  1. 值传递包含Eigen数据类型的class
struct Foo
{
  Eigen::Vector2d v;
};
void my_function(Foo v);
void my_function(const Foo& v);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值