在使用Eigen的时候,如果STL容器中的元素是Eigen数据库结构,比如下面用vector容器存储Eigen::Matrix4f类型或用map存储Eigen::Vector4f数据类型时:


  1. vector<Eigen::Matrix4d>;

  2. std::map<int, Eigen::Vector4f>

这么使用编译能通过,当运行时会报段错误。

对eigen中的固定大小的类使用STL容器的时候,如果直接使用会出错,所谓固定大小(fixed-size)的类是指在编译过程中就已经分配好内存空间的类,为了提高运算速度,对于SSE或者AltiVec指令集,向量化必须要求向量是以16字节即128bit对齐的方式分配内存空间,所以针对这个问题,容器需要使用eigen自己定义的内存分配器,即aligned_allocator。

这个分配器所在头文件为:

#include <Eigen/StdVector>

根据STL容器的模板类,比如vector的声明:


  1. template<typename _Tp, typename _Alloc = allocator<_Tp> >

  2. class vector : protected _Vector_base<_Tp, _Alloc>

  3. {

  4. .....

  5. }

使用aligned_alloctor分配器,上面的例子正确写法为:

std::vector<Eigen::Matrix4d,Eigen::aligned_allocator<Eigen::Matrix4d>>
std::map<int, Eigen::Vector4f, Eigen::aligned_allocator<std::pair<const int, Eigen::Vector4f>>

上述的这段代码才是标准的定义容器方法,只是我们一般情况下定义容器的元素都是C++中的类型,所以可以省略,这是因为在C++11标准中,aligned_allocator管理C++中的各种数据类型的内存方法是一样的,可以不需要着重写出来。但是在Eigen管理内存和C++11中的方法是不一样的,所以需要单独强调元素的内存分配和管理。

转载于:https://www.cnblogs.com/kerngeeksund/p/10912257.html

Eigen内存分配器aligned_allocator相关推荐

  1. 内存分配器设计的演进

    文章目录 栈内存空间是否够用 系统调用申请内存 最简单的内存分配器实现 -- bump allocator 可扩容的 Bump alloactor 通过free-list 管理的 allocator ...

  2. mysql 自动管理内存_MySQL内存管理,内存分配器和操作系统

    导读 作者:Sveta Smirnova 翻译:郑志江 校对:徐晨亮 原文 :MySQL Memory Management, Memory Allocators and Operating Syst ...

  3. 内存分配器memblock【转】

    转自:http://blog.csdn.net/kickxxx/article/details/54710243 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 背景 Data ...

  4. slab 内存分配器介绍(一)

    原文引用地址:https://www.ibm.com/developerworks/cn/linux/l-linux-slab-allocator/ 动态内存管理 内存管理的目标是提供一种方法,为实现 ...

  5. STL内存分配器:allocator

    一.STL泛型容器 与 内存管理 1.1 STL泛型容器中隐藏了内存管理工作 STL提供了很多泛型容器,如vector,list,map等.程序员使用时之关心如何存放对象,不用关心如何管理内存. 容器 ...

  6. 内核中的几种内存分配器

    内存管理是内核是最复杂同时也是最重要的一部分,其中就涉及到了多种内存分配器,如果内核初始化阶段使用的bootmem分配器,分配大块内存的伙伴系统,以及其分配较小块内存的slab.slub和slob分配 ...

  7. [CNT]关于自己的一个小小的slab内存分配器

    引言:应用级别的内存分配器的作用主要在于减少malloc函数的调用,降低系统的内存碎片.作为高性能的服务器,一般都会有自己的内存分配方案.slab作为一款Linux内核的经典内存分配方式,应用在很多的 ...

  8. MySQL内存管理,内存分配器和操作系统

    原文 :MySQL Memory Management, Memory Allocators and Operating System 本文涉及链接在文末展示 When users experienc ...

  9. Linux glibc内存管理:用户态内存分配器——ptmalloc实现原理

    文章目录 ptmalloc 设计假设 Arena Chunk Bins 内存分配.释放流程 总结 C++ STL : SGI-STL空间配置器源码剖析 Linux 内存管理 | 物理内存管理:物理内存 ...

最新文章

  1. QT5中如何使用SQLite
  2. Javaamp;amp;(面试题)初始化顺序总结
  3. Java虚拟机参数设置(转)
  4. 单链表--键盘输入、插入、删除、查询、输出
  5. python script文件夹在哪_Python获取当前脚本文件夹(Script)的绝对路径方法代码
  6. 程序员/设计师能用上的 75 份速查表
  7. linux下mysql-5.6忘记root密码,重置root密码详细过程
  8. python蟒蛇绘制实例分析_011 实例2-Python蟒蛇绘制
  9. php $r,PHP
  10. Linux网络编程---I/O复用模型之epoll
  11. PowerDesigner物理模型用法总结
  12. grep awk 搜索日志常用命令
  13. EXTJS4.0视频教程(网盘下载)
  14. 数字大写;大写的一到十;…
  15. 桌面虚拟化传输协议之android spice及spice源码分析之server(1)
  16. Samba:centos服务器之间相互共享文件夹,可以用win10连接共享文件夹,并可以使用Docker部署
  17. 计算机控制系统是闭环还是开环,电喷摩托车系统的开环控制与闭环控制
  18. 哈尔滨计算机管理,哈尔滨戴斯酒店计算机管理完整系统.doc
  19. 常见端口号一览(详细)
  20. 华为技术官又出神作,鸿蒙操作系统完整文档笔记现已疯传

热门文章

  1. Airbnb NYC2019分析实战
  2. mac 升级java_mac版java更新升级方法
  3. aic值检验 p值_R语言入门之独立性检验
  4. STM32 阿里云MQTT esp8266 AT命令
  5. 归宿 - 写给无处安放的内心
  6. 华为云服务器配置过程
  7. 亚马逊云服务器防火墙,Amazon WAF | Web 应用程序防火墙 | 亚马逊云科技
  8. actions vuex 请求_vue中vuex的actions里面请求接口,提交给mutations报错
  9. 一台机器(群晖、CentOS)挂两台网心云docker
  10. 用Mothur制作OTUtable