Eigen3堆栈还是堆?

问题描述 投票:0回答:1

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

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

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

stack heap eigen eigen3
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.