Eigen3 栈还是堆?
Eigen3 stack or heap?
如果我在函数中写入以下局部变量:
Eigen::VectorXd v = Eigen::Vector2d(1.0,2.0);
v
分配在栈上还是堆上?
对象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
对于小对象,如果您在编译时知道大小,您应该几乎总是喜欢使用固定大小 Vectors/Matrices。
如果我在函数中写入以下局部变量:
Eigen::VectorXd v = Eigen::Vector2d(1.0,2.0);
v
分配在栈上还是堆上?
对象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
对于小对象,如果您在编译时知道大小,您应该几乎总是喜欢使用固定大小 Vectors/Matrices。