一:错误提示:error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned

英文提示:error C2719: 'p': formal parameter with __declspec(align('16')) won't be aligned

中文提示:error C2719: “p”: 具有 __declspec(align('16')) 的形参将不被对齐

导致整个现象的主要原因是使用了Eigen库,Eigen为了使用SSE加速,所以内存分配上使用了128位的指针。

更加准确的说法:

“First, "fixed-size" should be clear: an Eigen object has fixed size if its number of rows and its number of columns are fixed at compile-time. So for example Matrix3f has fixed size, but MatrixXf doesn't (the opposite of fixed-size is dynamic-size).

The array of coefficients of a fixed-size Eigen object is a plain "static array", it is not dynamically allocated. For example, the data behind a Matrix4f is just a "float array[16]".

Fixed-size objects are typically very small, which means that we want to handle them with zero runtime overhead -- both in terms of memory usage and of speed.

Now, vectorization (both SSE and AltiVec) works with 128-bit packets. Moreover, for performance reasons, these packets need to be have 128-bit alignment.

So it turns out that the only way that fixed-size Eigen objects can be vectorized, is if their size is a multiple of 128 bits, or 16 bytes. Eigen will then request 16-byte alignment for these objects, and henceforth rely on these objects being aligned so no runtime check for alignment is performed.”

二:解决方案:

分为四种情况:

  • Cause 1: Structures having Eigen objects as members
  • Cause 2: STL Containers
  • Cause 3: Passing Eigen objects by value
  • Cause 4: Compiler making a wrong assumption on stack alignment (for instance GCC on Windows)

每种情况可以对照官方的说法。可以参考如下链接

http://eigen.tuxfamily.org/dox/TopicUnalignedArrayAssert.html

在此不再重复表述。

三:我的解决方法:eigen 3.1.2有 bug,  重装Eigen;

关闭使用 预编译头;

关闭编译选项里面的16位对齐;

把Eigen::Vector4f    传值改为 传引用 Eigen::Vector4f &;

把结构体 传值 全部转换为 传引用。躲过对齐!!!

编译器选项:C/C++ ---代码生成---结构图成员对齐;

可恶:忘记了当初是怎么解决的!!!!!

四:对stl vector 进行修改:http://blog.csdn.net/pkueecser/article/details/8602656

产生问题的resize()方法,改为:

    void resize(size_type _Newsize, const _Ty & _Val)
    { // determine new length, padding with _Val elements as needed
        if (size() < _Newsize)
            _Insert_n(end(), _Newsize - size(), _Val);
        else if (_Newsize < size())
            erase(begin() + _Newsize, end());
    }

  注意其中红色部分,将传值改为传参,避免在参数栈上创建被对齐的结构的对象。然后,在我们使用std::vector< Foo<5, float> >之前包含我们的foo_vector.hpp头文件,就可以正常使用了。  注意红色部分.....

是微软坑呢?还是Eigen坑?个人感觉微软更坑!!!

后记:
       添加 修改为 869行为引用之后,引发2562行的错误,修改方式为 把第二个参数0去掉。

Eigen库对齐问题:declspec(align('16')) 的形参将不被对齐相关推荐

  1. 初探Eigen(error C2719: “Qcw”: 具有 __declspec(align('16')) 的形参将不被对齐)

    想写一个方向余弦矩阵转四元数的小函数,试用Eigen,如下所示: bool DCM2Q(Eigen::Matrix3f DCM, Eigen::Vector4f Qcw) 结果编译却出现错误:erro ...

  2. eigen库学习笔记

    #简介 Eigen是有关线性代数(矩阵.向量等)的c++模板库.支持SSE2/3/4, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bi ...

  3. 0.前言 与 Eigen库的使用整理

    [C++ 基于Eigen库实现CRN前向推理] 前言:背景 与 Eigen库的使用整理 前言:(Eigen库使用记录) 第一部分:WavFile.class (实现读取wav/pcm,实现STFT) ...

  4. 关于C++中Eigen库效率提升的思考

    目录 引言 一.什么是Eigen? 二.使用步骤 1.引入库 2.建立矩阵 3.基本操作 三.具体的例子--矩阵乘法 1.Eigen库 2.GPU并行计算 总结 可能的方案 引言 在处理矩阵运算上,各 ...

  5. Eigen库学习教程(全)

    说明:本教程主要是对eigen官网文档做了一个简要的翻译,参考了eigen官网以及一些博主的技术贴,在此表示感谢. Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相 ...

  6. R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align)

    R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align) 目录

  7. 使用 Eigen 库写第一个程序

    一.使用 Eigen 库时编译器设置 使用 Eigen 库之前需要下载库文件,并进行简单的设置. 下载地址: http://eigen.tuxfamily.org/index.php?title=Ma ...

  8. ROS中使用Eigen库[不定期更新]

    前期说明 ROS中的数据操作需要线性代数,Eigen库是C++中的线性代数计算库. Eigen库独立于ROS,但是在ROS中可以使用. Eigen库可以参见http://eigen.tuxfamily ...

  9. nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(一)

    <Neural Machine Translation by Jointly Learning to Align and Translate>--基于联合学习对齐和翻译的神经机器翻译 作者 ...

最新文章

  1. mysql rollback函数_PHP mysqli_rollback() 函数_程序员人生
  2. 2月07日云栖精选夜读:观点 | 阿里云 MVP 唐俊飞:安全性可以认为是一种能力...
  3. MySQL Transaction--快照读和当前读
  4. The import javax.servlet cannot be resolved
  5. 成员缩写_青春有你2snh48成员都有谁 10名SNH48女团成员介绍
  6. MATLAB在通信系统仿真中的注意
  7. html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试
  8. cmd中加载java源文件_如何在cmd中编译和运行java源文件
  9. 简述linux常见的安全措施,六个常用的Linux安全基本措施
  10. 【原创】基于phpGrace+uniApp开发之:5.登录界面增加图片验证码
  11. 记录一次游戏服务器的压测调优记录(Golang语言)
  12. 扩展频谱--直接序列扩频
  13. (超详细,避免踩坑)如何使用freeMaker模板生成器处理图片以及文字替换
  14. 【Dam Dadi Doo】MMD镜头+动作打包下载.zip
  15. P4315 月下“毛景树” 树链剖分+线段树
  16. python如何模拟键盘输入_Python模拟键盘输入和鼠标操作
  17. 踢球骨折在家day5
  18. Redis学习(二)之 Redis Cluster集群
  19. C语言之不等式的写法,大于小于等于
  20. 计算机工具栏图标素材,设计软件工具栏图标icon

热门文章

  1. WinExec, ShellExecute,CreateProcess的对比
  2. SharePoint 数据迁移解决方案
  3. [LeetCode] Permutations 解题报告
  4. 自定义C++一元多项式类
  5. cenos 下的一些常用命令及技巧收集篇
  6. 剖析——移动构造函数
  7. CNN-3: VGGNet 卷积神经网络模型
  8. Codeforces.1110E.Magic Stones(思路 差分)
  9. Spring aop 记录操作日志 Aspect 自定义注解
  10. javascript实现tab切换的方法(2)