一:错误提示: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.”

二:解决方案:

分为四种情况:

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

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库在Visual Studio2013中传参对齐报错问题

    Error as follow: 具体问题及解决办法描述如下: (引自http://www.fx114.net/qa-278-97757.aspx) /************************ ...

  2. Eigen库和STL容器冲突问题

    博客参考:https://blog.csdn.net/huajun998/article/details/54311561 在程序中想使用类似于如下的容器 std::vector<Eigne:: ...

  3. NDK 开发实例二(添加 Eigen库)

    上一篇,我已经阐述了如何创建一个简单的NDK实例: NDK 开发实例一(Android.mk环境配置下) 在上一篇的基础上,我们来添加Eigen库,然后做一个简单实例. Eigen是一个高层次的C + ...

  4. Eigen库矩阵运算使用方法

    Eigen库矩阵运算使用方法 Eigen这个类库,存的东西好多的,来看一下主要的几个头文件吧: ——Core 有关矩阵和数组的类,有基本的线性代数(包含 三角形 和 自伴乘积 相关),还有相应对数组的 ...

  5. SVD分解的c++代码(Eigen 库)

    使用Eigen 库:进行svd分解,形如 A = U * S * VT. JacobiSVD<MatrixXd> svd(J, ComputeThinU | ComputeThinV); ...

  6. C++ 矩阵计算库 :Eigen库

    Eigen http://eigen.tuxfamily.org/index.php?title=Main_Page 下载http://bitbucket.org/eigen/eigen/get/3. ...

  7. Eigen库笔记整理(一)

    首先熟悉Eigen库的用途,自行百度. 引入头文件: // Eigen 部分 #include <Eigen/Core> // 稠密矩阵的代数运算(逆,特征值等) #include < ...

  8. 如何安装Eigen库和Sophus库

    * { font-family: "Tibetan Machine Uni", "sans-serif", STFangSong; outline: none ...

  9. C/C++编程笔记:C语言对齐问题【结构体、栈内存以及位域对齐】

    引言 考虑下面的结构体定义: 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4. 现在,我们编写一个简单的程序: 运行后输出: 为什么会这 ...

随机推荐

  1. eas之怎么设置单据保存或者提交完不跳到下个新增页面

    this.chkMenuItemSubmitAndAddNew.setSelected(false);

  2. LA 4327

    Panagola, The Lord of city F likes to parade very much. He always inspects his city in his car and e ...

  3. 【Leetcode】【简单】【169求众数】【JavaScript】

    题目 169. 求众数 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [ ...

  4. 重新学习html和css

    当初学习前端的时候,属于快速入门那种,没有好好深入学习html和css.如今,在空闲时间重新拿起基础书学习,都会写到一些新的知识. 1.css实现圆角.渐变功能.使用border-radius以及li ...

  5. cxdbImage以及图像显示

    把pdf以及图像存入数据库,然后根据需要显示出来.在处理的过程中,不同类型的图像格式有其不同的类,如果这个概念不清楚,就会绕一个很大的圈子. MyJPEG : TJPEGImage ; mypng : ...

  6. Automatic Tuning of Memory Management

    4.2.2 Automatic Tuning of Memory Management Two memory management initialization parameters, MEMORY_ ...

  7. 转载 - C++ bitset类使用与简介

    出处:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251121331412/ C++ bitset类的使用与简介   有些程序 ...

  8. 【ACM】hdu_zs1_1003_放大的X _201307271557

    放大的X Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submissio ...

  9. SpringBoot支持AJAX跨域请求

    利用注解的方式解决AJAX请求跨域问题 1.编写一个支持跨域请求的 Configuration - 第一种方式 - CorsConfig.java import org.springframework ...

  10. python Flask JQuery使用说明

    0.前言     近期因为某种原因再次学习Flask框架.借助博客整理相关内容.Flask框架和Apache+PHP存在少许不同,Flask框架中JS和CSS文件存放于一个相对固定的位置. 普通情况下 ...