0
点赞
收藏
分享

微信扫一扫

Eigen3 内存对齐问题

老罗话编程 2022-04-14 阅读 59
c++ubuntu

Eigen3 内存对齐问题

Eigen3 内存对齐问题

参考官方文档
如何设置取消内存对齐的操作没找到
以下内存对齐问题c++17好像不需要考虑
主要分为以下3种情形:

以 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 条评论