Eigen3堆栈还是堆?

时间:2019-02-12 13:02:27

标签: stack heap eigen eigen3

如果我在函数中编写以下局部变量:

Eigen::VectorXd v = Eigen::Vector2d(1.0,2.0);

v是分配在堆栈还是堆上?

1 个答案:

答案 0 :(得分:2)

对象v本身分配在堆栈上,将包含一个指针和一个Index变量。在v的构建过程中,堆上还会分配16个字节。

简体,会发生以下情况:

struct VectorXd {
    double* data;
    ptrdiff_t rows;
};


void foo(){
    VectorXd v;
    v.data = new double[2];  // actually uses an aligned malloc instead of new
    v.rows = 2;
    v.data[0] = 1.0; v.data[1] = 2.0;


    // At destruction:
    delete[] v.data;
}

要查看实际情况,请查看:https://godbolt.org/z/GYFmj0

对于小型对象,如果您知道在编译时知道的大小,则几乎总是应该使用固定大小的向量/矩阵。