当前位置:  开发笔记 > 编程语言 > 正文

包含特征向量的类的奇怪大小

如何解决《包含特征向量的类的奇怪大小》经验,为你挑选了1个好方法。

包含两个特征向量的C++类具有奇怪的大小.我的问题MWE在这里:

#include 
#include "Eigen/Core"

class test0 {
  Eigen::Matrix R;
  Eigen::Matrix T;
};

class test1 {
  Eigen::Matrix R;
  Eigen::Matrix T;
};

class test2 {
  Eigen::Matrix R;
  Eigen::Matrix T;
};

class test3 {
  Eigen::Matrix T;
};

class test4 {
  Eigen::Matrix T;
};

int main(int argc, char *argv[])
{
    std::cout << sizeof(test0) << ", " << sizeof(test1) << ", " << sizeof(test2) << ", " << sizeof(test3) << ", " << sizeof(test4) << std::endl;
    return 0;
}

我在我的系统上得到的输出(MacBook Pro,Xcode Clang ++编译器)是:

64,64,48,56,24

类"test1"有一些奇怪的额外填充 - 我原本预计它的大小为56.我不明白它的原因,特别是考虑到其他类都没有任何填充.任何人都可以解释,或者这是一个错误?



1> zneak..:

这是因为Eigen库的实现方式,并且与编译器技巧无关.后备存储器上Eigen::MatrixEIGEN_ALIGN_TO_BOUNDARY(16)标签,它具有特定于编译器的定义,要求类型在16字节边界上对齐.为了确保这一点,编译器必须在结构的末尾添加8个字节的填充,否则如果你有一个数组,第一个矩阵字段将不会在16字节边界上对齐test1.

Eigen只是不试图对后备存储施加类似的要求Eigen::Matrix.

这发生在Eigen/src/Core/DenseStorage.


您可以使用`Matrix `来本地禁用显式对齐并支付效率稍低的矢量化代码.
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有